From 0eeeb54784ee10b583f26997bad397921daf2bf4 Mon Sep 17 00:00:00 2001 From: jeffreytsai1004 Date: Mon, 24 Nov 2025 00:15:32 +0800 Subject: [PATCH] Update --- 2023/icons/studiolibrary.png | Bin 0 -> 4976 bytes .../animation_tools/studiolibrary/README.md | 64 + .../studiolibrary/mutils/README.md | 5 + .../studiolibrary/mutils/__init__.py | 30 + .../studiolibrary/mutils/animation.py | 839 ++ .../studiolibrary/mutils/attribute.py | 565 ++ .../studiolibrary/mutils/cmds.py | 425 + .../studiolibrary/mutils/decorators.py | 166 + .../studiolibrary/mutils/gui/__init__.py | 52 + .../mutils/gui/framerangemenu.py | 67 + .../mutils/gui/modelpanelwidget.py | 100 + .../mutils/gui/thumbnailcapturedialog.py | 290 + .../mutils/gui/thumbnailcapturemenu.py | 149 + .../studiolibrary/mutils/matchnames.py | 174 + .../studiolibrary/mutils/mirrortable.py | 918 +++ .../studiolibrary/mutils/namespace.py | 88 + .../studiolibrary/mutils/node.py | 178 + .../studiolibrary/mutils/playblast.py | 107 + .../studiolibrary/mutils/pose.py | 591 ++ .../studiolibrary/mutils/scriptjob.py | 38 + .../studiolibrary/mutils/selectionset.py | 111 + .../studiolibrary/mutils/tests/__init__.py | 40 + .../studiolibrary/mutils/tests/data/anim.ma | 84 + .../mutils/tests/data/animation.anim | Bin 0 -> 3600 bytes .../studiolibrary/mutils/tests/data/pose.json | 166 + .../studiolibrary/mutils/tests/data/sphere.ma | 354 + .../studiolibrary/mutils/tests/data/test.ma | 187 + .../mutils/tests/data/test_anim.ma | 429 + .../test_bake_connected.anim/animation.ma | 29 + .../test_bake_connected.anim/animation.mb | Bin 0 -> 27544 bytes .../data/test_bake_connected.anim/pose.json | 224 + .../mutils/tests/data/test_bake_connected.ma | 636 ++ .../data/test_load_insert.anim/animation.ma | 100 + .../data/test_load_insert.anim/animation.mb | Bin 0 -> 19296 bytes .../data/test_load_insert.anim/pose.json | 177 + .../data/test_load_replace.anim/animation.ma | 100 + .../data/test_load_replace.anim/animation.mb | Bin 0 -> 19296 bytes .../data/test_load_replace.anim/pose.json | 177 + .../animation.ma | 100 + .../animation.mb | Bin 0 -> 19296 bytes .../pose.json | 177 + .../mutils/tests/data/test_mirror_tables.ma | 748 ++ .../tests/data/test_non_unique_names.ma | 797 ++ .../tests/data/test_non_unique_names.pose | 151 + .../.studioLibrary/record.dict | 1 + .../data/test_older_version.anim/animation.ma | 7123 +++++++++++++++++ .../data/test_older_version.anim/pose.dict | 1 + .../mutils/tests/data/test_older_version.dict | 34 + .../mutils/tests/data/test_pose.ma | 269 + .../mutils/tests/data/test_pose.pose | 151 + .../.studiolibrary/record.dict | 1 + .../studiolibrary/mutils/tests/run.py | 75 + .../studiolibrary/mutils/tests/test_anim.py | 125 + .../mutils/tests/test_attribute.py | 168 + .../studiolibrary/mutils/tests/test_base.py | 143 + .../studiolibrary/mutils/tests/test_match.py | 230 + .../mutils/tests/test_mirrortable.py | 238 + .../studiolibrary/mutils/tests/test_pose.py | 157 + .../studiolibrary/mutils/tests/test_utils.py | 72 + .../studiolibrary/mutils/transferobject.py | 403 + .../studiolibrary/studiolibrary/__init__.py | 30 + .../studiolibrary/studiolibrary/config.py | 94 + .../studiolibrary/config/default.json | 61 + .../studiolibrary/studiolibrary/folderitem.py | 367 + .../studiolibrary/studiolibrary/library.py | 1081 +++ .../studiolibrary/libraryitem.py | 913 +++ .../studiolibrary/librarywindow.py | 2787 +++++++ .../studiolibrary/studiolibrary/main.py | 58 + .../studiolibrary/studiolibrary/resource.py | 74 + .../studiolibrary/resource/css/default.css | 1515 ++++ .../studiolibrary/resource/fonts/LICENSE.txt | 202 + .../resource/fonts/OpenSans-Bold.ttf | Bin 0 -> 224452 bytes .../resource/fonts/OpenSans-BoldItalic.ttf | Bin 0 -> 213168 bytes .../resource/fonts/OpenSans-ExtraBold.ttf | Bin 0 -> 222424 bytes .../fonts/OpenSans-ExtraBoldItalic.ttf | Bin 0 -> 213336 bytes .../resource/fonts/OpenSans-Italic.ttf | Bin 0 -> 212760 bytes .../resource/fonts/OpenSans-Light.ttf | Bin 0 -> 222236 bytes .../resource/fonts/OpenSans-LightItalic.ttf | Bin 0 -> 213024 bytes .../resource/fonts/OpenSans-Regular.ttf | Bin 0 -> 217276 bytes .../resource/fonts/OpenSans-SemiBold.ttf | Bin 0 -> 221164 bytes .../fonts/OpenSans-SemiBoldItalic.ttf | Bin 0 -> 212732 bytes .../studiolibrary/resource/icons/add.png | Bin 0 -> 149 bytes .../studiolibrary/resource/icons/add_28.png | Bin 0 -> 224 bytes .../studiolibrary/resource/icons/archive.svg | 1 + .../resource/icons/arrows-rotate.svg | 1 + .../studiolibrary/resource/icons/asset.svg | 1 + .../studiolibrary/resource/icons/assets.svg | 1 + .../studiolibrary/resource/icons/bars.svg | 1 + .../studiolibrary/resource/icons/blank.png | Bin 0 -> 570 bytes .../studiolibrary/resource/icons/book.svg | 1 + .../resource/icons/branch_closed_black.png | Bin 0 -> 318 bytes .../resource/icons/branch_closed_white.png | Bin 0 -> 7491 bytes .../resource/icons/branch_open_black.png | Bin 0 -> 324 bytes .../resource/icons/branch_open_white.png | Bin 0 -> 705 bytes .../resource/icons/camera-alt.svg | 1 + .../studiolibrary/resource/icons/camera.svg | 1 + .../studiolibrary/resource/icons/cancel.png | Bin 0 -> 963 bytes .../resource/icons/caret-down.svg | 1 + .../resource/icons/caret-right.svg | 1 + .../resource/icons/character.svg | 1 + .../icons/check_box_checked_black.png | Bin 0 -> 1116 bytes .../icons/check_box_checked_white.png | Bin 0 -> 766 bytes .../icons/check_box_unchecked_black.png | Bin 0 -> 848 bytes .../icons/check_box_unchecked_white.png | Bin 0 -> 816 bytes .../studiolibrary/resource/icons/circle.png | Bin 0 -> 943 bytes .../studiolibrary/resource/icons/circle.svg | 1 + .../studiolibrary/resource/icons/cloud.svg | 1 + .../studiolibrary/resource/icons/cog.png | Bin 0 -> 1073 bytes .../resource/icons/columns-3.svg | 1 + .../studiolibrary/resource/icons/critical.png | Bin 0 -> 1215 bytes .../studiolibrary/resource/icons/cross.png | Bin 0 -> 284 bytes .../studiolibrary/resource/icons/database.svg | 1 + .../studiolibrary/resource/icons/delete.png | Bin 0 -> 154 bytes .../resource/icons/drop_arrow_black.png | Bin 0 -> 337 bytes .../resource/icons/drop_arrow_white.png | Bin 0 -> 320 bytes .../resource/icons/environment.svg | 1 + .../studiolibrary/resource/icons/error.png | Bin 0 -> 207 bytes .../studiolibrary/resource/icons/expand.svg | 1 + .../resource/icons/eye-slash.svg | 1 + .../studiolibrary/resource/icons/eye.svg | 1 + .../studiolibrary/resource/icons/face.svg | 1 + .../studiolibrary/resource/icons/favorite.svg | 1 + .../studiolibrary/resource/icons/file-alt.svg | 1 + .../studiolibrary/resource/icons/file.svg | 1 + .../studiolibrary/resource/icons/filter.svg | 1 + .../studiolibrary/resource/icons/folder.svg | 1 + .../resource/icons/folder_collapsed.png | Bin 0 -> 184 bytes .../resource/icons/folder_expanded.png | Bin 0 -> 205 bytes .../resource/icons/folder_item.png | Bin 0 -> 18892 bytes .../resource/icons/folder_open.png | Bin 0 -> 1358 bytes .../resource/icons/folder_open.svg | 1 + .../studiolibrary/resource/icons/globe.svg | 1 + .../studiolibrary/resource/icons/groupby.png | Bin 0 -> 479 bytes .../studiolibrary/resource/icons/hand.svg | 1 + .../studiolibrary/resource/icons/header.png | Bin 0 -> 9017 bytes .../studiolibrary/resource/icons/icon.png | Bin 0 -> 870 bytes .../studiolibrary/resource/icons/image.png | Bin 0 -> 548 bytes .../studiolibrary/resource/icons/inbox.svg | 1 + .../studiolibrary/resource/icons/info.png | Bin 0 -> 207 bytes .../studiolibrary/resource/icons/layers.svg | 1 + .../studiolibrary/resource/icons/lock.svg | 1 + .../studiolibrary/resource/icons/logo.png | Bin 0 -> 870 bytes .../resource/icons/logo_high.png | Bin 0 -> 2441 bytes .../resource/icons/logo_white.png | Bin 0 -> 3971 bytes .../resource/icons/magnifying-glass.svg | 1 + .../resource/icons/plus-large.svg | 1 + .../studiolibrary/resource/icons/plus.svg | 1 + .../resource/icons/preview_placeholder.png | Bin 0 -> 2585 bytes .../studiolibrary/resource/icons/question.png | Bin 0 -> 1416 bytes .../icons/radio_button_checked_black.png | Bin 0 -> 923 bytes .../icons/radio_button_checked_white.png | Bin 0 -> 943 bytes .../icons/radio_button_unchecked_black.png | Bin 0 -> 1128 bytes .../icons/radio_button_unchecked_white.png | Bin 0 -> 1203 bytes .../studiolibrary/resource/icons/search.png | Bin 0 -> 549 bytes .../studiolibrary/resource/icons/search.svg | 1 + .../studiolibrary/resource/icons/settings.png | Bin 0 -> 132 bytes .../studiolibrary/resource/icons/share.svg | 1 + .../studiolibrary/resource/icons/shot.svg | 1 + .../studiolibrary/resource/icons/sliders.svg | 1 + .../studiolibrary/resource/icons/sortby.png | Bin 0 -> 358 bytes .../studiolibrary/resource/icons/sync.png | Bin 0 -> 621 bytes .../studiolibrary/resource/icons/tag.png | Bin 0 -> 325 bytes .../resource/icons/thumbnail.png | Bin 0 -> 609 bytes .../resource/icons/thumbnail_solid.png | Bin 0 -> 679 bytes .../studiolibrary/resource/icons/times.svg | 1 + .../studiolibrary/resource/icons/trash.svg | 1 + .../studiolibrary/resource/icons/tree.svg | 1 + .../studiolibrary/resource/icons/user.svg | 1 + .../studiolibrary/resource/icons/users.svg | 1 + .../studiolibrary/resource/icons/vehicle.svg | 1 + .../studiolibrary/resource/icons/video.svg | 1 + .../studiolibrary/resource/icons/view_all.png | Bin 0 -> 233 bytes .../resource/icons/view_compact.png | Bin 0 -> 223 bytes .../resource/icons/view_settings.png | Bin 0 -> 488 bytes .../studiolibrary/resource/icons/warning.png | Bin 0 -> 207 bytes .../studiolibrary/resource/icons/xmark.svg | 1 + .../studiolibrary/studiolibrary/utils.py | 1739 ++++ .../widgets/PlaceholderWidget.ui | 95 + .../studiolibrary/widgets/PreviewWidget.ui | 300 + .../studiolibrary/widgets/__init__.py | 37 + .../studiolibrary/widgets/colorpicker.py | 408 + .../studiolibrary/widgets/fieldwidgets.py | 1512 ++++ .../studiolibrary/widgets/filterbymenu.py | 310 + .../studiolibrary/widgets/formwidget.py | 785 ++ .../studiolibrary/widgets/groupboxwidget.py | 150 + .../studiolibrary/widgets/groupbymenu.py | 121 + .../studiolibrary/widgets/iconpicker.py | 324 + .../widgets/itemswidget/__init__.py | 11 + .../widgets/itemswidget/groupitem.py | 216 + .../studiolibrary/widgets/itemswidget/item.py | 1513 ++++ .../widgets/itemswidget/itemdelegate.py | 71 + .../widgets/itemswidget/itemswidget.py | 1160 +++ .../widgets/itemswidget/itemviewmixin.py | 306 + .../widgets/itemswidget/listview.py | 630 ++ .../widgets/itemswidget/treewidget.py | 685 ++ .../studiolibrary/widgets/librariesmenu.py | 67 + .../studiolibrary/widgets/lightbox.py | 228 + .../studiolibrary/widgets/lineedit.py | 183 + .../studiolibrary/widgets/menubarwidget.py | 274 + .../studiolibrary/widgets/messagebox.py | 778 ++ .../widgets/placeholderwidget.py | 22 + .../studiolibrary/widgets/previewwidget.py | 213 + .../studiolibrary/widgets/searchwidget.py | 356 + .../studiolibrary/widgets/separatoraction.py | 93 + .../studiolibrary/widgets/sequencewidget.py | 308 + .../studiolibrary/widgets/settings.py | 78 + .../widgets/sidebarwidget/__init__.py | 12 + .../widgets/sidebarwidget/sidebarwidget.py | 1256 +++ .../sidebarwidget/sidebarwidgetitem.py | 392 + .../studiolibrary/widgets/slideraction.py | 81 + .../studiolibrary/widgets/sortbymenu.py | 111 + .../studiolibrary/widgets/statuswidget.py | 235 + .../studiolibrary/widgets/themesmenu.py | 658 ++ .../studiolibrary/widgets/toastwidget.py | 160 + .../studiolibrarymaya/BaseLoadWidget.ui | 454 ++ .../studiolibrarymaya/BaseSaveWidget.ui | 304 + .../studiolibrary/studiolibrarymaya/README.md | 109 + .../studiolibrarymaya/__init__.py | 11 + .../studiolibrarymaya/animitem.py | 273 + .../studiolibrarymaya/baseitem.py | 445 + .../studiolibrarymaya/baseloadwidget.py | 255 + .../studiolibrarymaya/basesavewidget.py | 488 ++ .../studiolibrarymaya/exampleitem.py | 92 + .../studiolibrarymaya/icons/animation.png | Bin 0 -> 171 bytes .../studiolibrarymaya/icons/arrow.png | Bin 0 -> 260 bytes .../studiolibrarymaya/icons/file.png | Bin 0 -> 652 bytes .../studiolibrarymaya/icons/insert.png | Bin 0 -> 10651 bytes .../studiolibrarymaya/icons/insertConnect.png | Bin 0 -> 10452 bytes .../studiolibrarymaya/icons/merge.png | Bin 0 -> 10379 bytes .../studiolibrarymaya/icons/mergeConnect.png | Bin 0 -> 11117 bytes .../studiolibrarymaya/icons/mirrortable.png | Bin 0 -> 348 bytes .../studiolibrarymaya/icons/pose.png | Bin 0 -> 275 bytes .../studiolibrarymaya/icons/replace.png | Bin 0 -> 9657 bytes .../icons/replaceCompletely.png | Bin 0 -> 8053 bytes .../icons/replaceConnect.png | Bin 0 -> 9817 bytes .../studiolibrarymaya/icons/selectionSet.png | Bin 0 -> 572 bytes .../studiolibrarymaya/icons/selectionSet2.png | Bin 0 -> 4360 bytes .../studiolibrarymaya/mayafileitem.py | 105 + .../studiolibrarymaya/mayalibrarywindow.py | 195 + .../studiolibrarymaya/mirroritem.py | 231 + .../studiolibrarymaya/poseitem.py | 392 + .../studiolibrarymaya/setsitem.py | 65 + .../studiolibrarymaya/setsmenu.py | 167 + .../studiolibrary/studioqt/__init__.py | 21 + .../studiolibrary/studioqt/color.py | 78 + .../studiolibrary/studioqt/decorators.py | 47 + .../studiolibrary/studioqt/icon.py | 185 + .../studiolibrary/studioqt/imagesequence.py | 230 + .../studiolibrary/studioqt/menu.py | 81 + .../studiolibrary/studioqt/pixmap.py | 40 + .../studiolibrary/studioqt/stylesheet.py | 102 + .../studiolibrary/studioqt/utils.py | 230 + .../studiolibrary/studiovendor/Qt.py | 1956 +++++ .../studiolibrary/studiovendor/__init__.py | 0 .../studiolibrary/studiovendor/six.py | 973 +++ 2023/shelves/shelf_Nexus_Animation.mel | 35 + 256 files changed, 49494 insertions(+) create mode 100644 2023/icons/studiolibrary.png create mode 100644 2023/scripts/animation_tools/studiolibrary/README.md create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/README.md create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/animation.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/attribute.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/cmds.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/decorators.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/gui/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/gui/framerangemenu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/gui/modelpanelwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/gui/thumbnailcapturedialog.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/gui/thumbnailcapturemenu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/matchnames.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/mirrortable.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/namespace.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/node.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/playblast.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/pose.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/scriptjob.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/selectionset.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/anim.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/animation.anim create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/pose.json create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/sphere.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_anim.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/animation.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/animation.mb create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/pose.json create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_insert.anim/animation.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_insert.anim/animation.mb create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_insert.anim/pose.json create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace.anim/animation.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace.anim/animation.mb create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace.anim/pose.json create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace_completely.anim/animation.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace_completely.anim/animation.mb create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace_completely.anim/pose.json create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_mirror_tables.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_non_unique_names.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_non_unique_names.pose create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/.studioLibrary/record.dict create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/animation.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/pose.dict create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.dict create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_pose.ma create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_pose.pose create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_poseplugin.pose/.studiolibrary/record.dict create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/run.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/test_anim.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/test_attribute.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/test_base.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/test_match.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/test_mirrortable.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/test_pose.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/tests/test_utils.py create mode 100644 2023/scripts/animation_tools/studiolibrary/mutils/transferobject.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/config.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/config/default.json create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/folderitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/library.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/libraryitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/librarywindow.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/main.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/css/default.css create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/LICENSE.txt create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Bold.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-BoldItalic.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-ExtraBold.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-ExtraBoldItalic.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Italic.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Light.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-LightItalic.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Regular.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-SemiBold.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-SemiBoldItalic.ttf create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/add.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/add_28.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/archive.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/arrows-rotate.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/asset.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/assets.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/bars.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/blank.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/book.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_closed_black.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_closed_white.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_open_black.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_open_white.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/camera-alt.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/camera.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cancel.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/caret-down.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/caret-right.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/character.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/check_box_checked_black.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/check_box_checked_white.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/check_box_unchecked_black.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/check_box_unchecked_white.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/circle.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/circle.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cloud.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cog.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/columns-3.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/critical.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cross.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/database.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/delete.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/drop_arrow_black.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/drop_arrow_white.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/environment.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/error.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/expand.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/eye-slash.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/eye.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/face.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/favorite.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/file-alt.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/file.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/filter.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_collapsed.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_expanded.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_item.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_open.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_open.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/globe.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/groupby.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/hand.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/header.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/icon.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/image.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/inbox.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/info.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/layers.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/lock.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/logo.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/logo_high.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/logo_white.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/magnifying-glass.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/plus-large.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/plus.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/preview_placeholder.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/question.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/radio_button_checked_black.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/radio_button_checked_white.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/radio_button_unchecked_black.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/radio_button_unchecked_white.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/search.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/search.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/settings.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/share.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/shot.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sliders.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sortby.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sync.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/tag.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/thumbnail.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/thumbnail_solid.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/times.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/trash.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/tree.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/user.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/users.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/vehicle.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/video.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_all.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_compact.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_settings.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/warning.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/xmark.svg create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/utils.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/PlaceholderWidget.ui create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/PreviewWidget.ui create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/colorpicker.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/fieldwidgets.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/filterbymenu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/formwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/groupboxwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/groupbymenu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/iconpicker.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/groupitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/item.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemdelegate.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemswidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemviewmixin.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/listview.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/treewidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/librariesmenu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/lightbox.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/lineedit.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/menubarwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/messagebox.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/placeholderwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/previewwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/searchwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/separatoraction.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sequencewidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/settings.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/sidebarwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/sidebarwidgetitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/slideraction.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sortbymenu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/statuswidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/themesmenu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/toastwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/BaseLoadWidget.ui create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/BaseSaveWidget.ui create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/README.md create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/animitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/baseitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/baseloadwidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/basesavewidget.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/exampleitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/animation.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/arrow.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/file.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/insert.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/insertConnect.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/merge.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/mergeConnect.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/mirrortable.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/pose.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/replace.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/replaceCompletely.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/replaceConnect.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/selectionSet.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/selectionSet2.png create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mayafileitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mayalibrarywindow.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mirroritem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/poseitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/setsitem.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/setsmenu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/color.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/decorators.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/icon.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/imagesequence.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/menu.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/pixmap.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/stylesheet.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studioqt/utils.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiovendor/Qt.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiovendor/__init__.py create mode 100644 2023/scripts/animation_tools/studiolibrary/studiovendor/six.py diff --git a/2023/icons/studiolibrary.png b/2023/icons/studiolibrary.png new file mode 100644 index 0000000000000000000000000000000000000000..98a8ea1c6da4dab484ae5fd29bf3de3b6a5ffca7 GIT binary patch literal 4976 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. + +from .cmds import * +from .decorators import * + +from . import playblast +from . import namespace + +from .scriptjob import ScriptJob +from .matchnames import matchNames, groupObjects + +from .node import Node +from .attribute import Attribute + +from .transferobject import TransferObject + +from .selectionset import SelectionSet, saveSelectionSet +from .pose import Pose, savePose, loadPose +from .animation import Animation, PasteOption, saveAnim, loadAnims +from .mirrortable import MirrorTable, MirrorOption, saveMirrorTable diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/animation.py b/2023/scripts/animation_tools/studiolibrary/mutils/animation.py new file mode 100644 index 0000000..ad6c8b8 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/animation.py @@ -0,0 +1,839 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import shutil +import logging + +from studiovendor.Qt import QtWidgets + +import mutils +import mutils.gui + +try: + import maya.cmds +except ImportError: + import traceback + traceback.print_exc() + +logger = logging.getLogger(__name__) + + +MIN_TIME_LIMIT = -10000 +MAX_TIME_LIMIT = 100000 +DEFAULT_FILE_TYPE = "mayaBinary" # "mayaAscii" + +# A feature flag that will be removed in the future. +FIX_SAVE_ANIM_REFERENCE_LOCKED_ERROR = True + + +class PasteOption: + + Insert = "insert" + Replace = "replace" + ReplaceAll = "replace all" + ReplaceCompletely = "replaceCompletely" + + +class AnimationTransferError(Exception): + """Base class for exceptions in this module.""" + pass + + +class OutOfBoundsError(AnimationTransferError): + """Exceptions for clips or ranges that are outside the expected range""" + pass + + +def validateAnimLayers(): + """ + Check if the selected animation layer can be exported. + + :raise: AnimationTransferError + """ + if maya.cmds.about(q=True, batch=True): + return + + animLayers = maya.mel.eval('$gSelectedAnimLayers=$gSelectedAnimLayers') + + # Check if more than one animation layer has been selected. + if len(animLayers) > 1: + msg = "More than one animation layer is selected! " \ + "Please select only one animation layer for export!" + + raise AnimationTransferError(msg) + + # Check if the selected animation layer is locked + if len(animLayers) == 1: + if maya.cmds.animLayer(animLayers[0], query=True, lock=True): + msg = "Cannot export an animation layer that is locked! " \ + "Please unlock the anim layer before exporting animation!" + + raise AnimationTransferError(msg) + + +def saveAnim( + objects, + path, + time=None, + sampleBy=1, + fileType="", + metadata=None, + iconPath="", + sequencePath="", + bakeConnected=True +): + """ + Save the anim data for the given objects. + + Example: + import mutils + mutils.saveAnim( + path="c:/example.anim", + objects=["control1", "control2"] + time=(1, 20), + metadata={'description': 'Example anim'} + ) + + :type path: str + :type objects: None or list[str] + :type time: (int, int) or None + :type fileType: str or None + :type sampleBy: int + :type iconPath: str + :type sequencePath: str + :type metadata: dict or None + :type bakeConnected: bool + + :rtype: mutils.Animation + """ + # Copy the icon path to the temp location + if iconPath: + shutil.copyfile(iconPath, path + "/thumbnail.jpg") + + # Copy the sequence path to the temp location + if sequencePath: + shutil.move(sequencePath, path + "/sequence") + + # Save the animation to the temp location + anim = mutils.Animation.fromObjects(objects) + anim.updateMetadata(metadata) + anim.save( + path, + time=time, + sampleBy=sampleBy, + fileType=fileType, + bakeConnected=bakeConnected + ) + return anim + + +def clampRange(srcTime, dstTime): + """ + Clips the given source time to within the given destination time. + + Example: + print clampRange((15, 35), (20, 30)) + # 20, 30 + + print clampRange((25, 45), (20, 30)) + # 25, 30 + + :type srcTime: (int, int) + :type dstTime: (int, int) + :rtype: (int, int) + """ + srcStart, srcEnd = srcTime + dstStart, dstEnd = dstTime + + if srcStart > dstEnd or srcEnd < dstStart: + msg = "The src and dst time do not overlap. " \ + "Unable to clamp (src=%s, dest=%s)" + raise OutOfBoundsError(msg, srcTime, dstTime) + + if srcStart < dstStart: + srcStart = dstStart + + if srcEnd > dstEnd: + srcEnd = dstEnd + + return srcStart, srcEnd + + +def moveTime(time, start): + """ + Move the given time to the given start time. + + Example: + print moveTime((15, 35), 5) + # 5, 20 + + :type time: (int, int) + :type start: int + :rtype: (int, int) + """ + srcStartTime, srcEndTime = time + duration = srcEndTime - srcStartTime + + if start is None: + startTime = srcStartTime + else: + startTime = start + + endTime = startTime + duration + + if startTime == endTime: + endTime = startTime + 1 + + return startTime, endTime + + +def findFirstLastKeyframes(curves, time=None): + """ + Return the first and last frame of the given animation curves + + :type curves: list[str] + :type time: (int, int) + :rtype: (int, int) + """ + first = maya.cmds.findKeyframe(curves, which='first') + last = maya.cmds.findKeyframe(curves, which='last') + + result = (first, last) + + if time: + + # It's possible (but unlikely) that the curves will not lie within the + # first and last frame + try: + result = clampRange(time, result) + except OutOfBoundsError as error: + logger.warning(error) + + return result + + +def insertKeyframe(curves, time): + """ + Insert a keyframe on the given curves at the given time. + + :type curves: list[str] + :type time: (int, int) + """ + startTime, endTime = time + + for curve in curves: + insertStaticKeyframe(curve, time) + + firstFrame = maya.cmds.findKeyframe(curves, time=(startTime, startTime), which='first') + lastFrame = maya.cmds.findKeyframe(curves, time=(endTime, endTime), which='last') + + if firstFrame < startTime < lastFrame: + maya.cmds.setKeyframe(curves, insert=True, time=(startTime, startTime)) + + if firstFrame < endTime < lastFrame: + maya.cmds.setKeyframe(curves, insert=True, time=(endTime, endTime)) + + +def insertStaticKeyframe(curve, time): + """ + Insert a static keyframe on the given curve at the given time. + + :type curve: str + :type time: (int, int) + :rtype: None + """ + startTime, endTime = time + + lastFrame = maya.cmds.findKeyframe(curve, which='last') + firstFrame = maya.cmds.findKeyframe(curve, which='first') + + if firstFrame == lastFrame: + maya.cmds.setKeyframe(curve, insert=True, time=(startTime, endTime)) + maya.cmds.keyTangent(curve, time=(startTime, startTime), ott="step") + + if startTime < firstFrame: + nextFrame = maya.cmds.findKeyframe(curve, time=(startTime, startTime), which='next') + if startTime < nextFrame < endTime: + maya.cmds.setKeyframe(curve, insert=True, time=(startTime, nextFrame)) + maya.cmds.keyTangent(curve, time=(startTime, startTime), ott="step") + + if endTime > lastFrame: + previousFrame = maya.cmds.findKeyframe(curve, time=(endTime, endTime), which='previous') + if startTime < previousFrame < endTime: + maya.cmds.setKeyframe(curve, insert=True, time=(previousFrame, endTime)) + maya.cmds.keyTangent(curve, time=(previousFrame, previousFrame), ott="step") + + +def duplicateNode(node, name): + """Duplicate the given node. + + :param node: Maya path. + :type node: str + :param name: Name for the duplicated node. + :type name: str + :returns: Duplicated node names. + :rtype: list[str] + """ + if maya.cmds.nodeType(node) in ["transform", "joint"]: + new = maya.cmds.duplicate(node, name=name, parentOnly=True)[0] + else: + # Please let us know if this logic is causing issues. + new = maya.cmds.duplicate(node, name=name)[0] + shapes = maya.cmds.listRelatives(new, shapes=True) or [] + if shapes: + return [shapes[0], new] + return [new] + + +def loadAnims( + paths, + spacing=1, + objects=None, + option=None, + connect=False, + namespaces=None, + startFrame=None, + mirrorTable=None, + currentTime=None, + showDialog=False, +): + """ + Load the animations in the given order of paths with the spacing specified. + + :type paths: list[str] + :type spacing: int + :type connect: bool + :type objects: list[str] + :type namespaces: list[str] + :type startFrame: int + :type option: PasteOption + :type currentTime: bool + :type mirrorTable: bool + :type showDialog: bool + """ + isFirstAnim = True + + if spacing < 1: + spacing = 1 + + if option is None or option == "replace all": + option = PasteOption.ReplaceCompletely + + if currentTime and startFrame is None: + startFrame = int(maya.cmds.currentTime(query=True)) + + if showDialog: + + msg = "Load the following animation in sequence;\n" + + for i, path in enumerate(paths): + msg += "\n {0}. {1}".format(i, os.path.basename(path)) + + msg += "\n\nPlease choose the spacing between each animation." + + spacing, accepted = QtWidgets.QInputDialog.getInt( + None, + "Load animation sequence", + msg, + spacing, + QtWidgets.QInputDialog.NoButtons, + ) + + if not accepted: + raise Exception("Dialog canceled!") + + for path in paths: + + anim = mutils.Animation.fromPath(path) + + if startFrame is None and isFirstAnim: + startFrame = anim.startFrame() + + if option == "replaceCompletely" and not isFirstAnim: + option = "insert" + + anim.load( + option=option, + objects=objects, + connect=connect, + startFrame=startFrame, + namespaces=namespaces, + currentTime=currentTime, + mirrorTable=mirrorTable, + ) + + duration = anim.endFrame() - anim.startFrame() + startFrame += duration + spacing + isFirstAnim = False + + +class Animation(mutils.Pose): + + IMPORT_NAMESPACE = "REMOVE_IMPORT" + + @classmethod + def fromPath(cls, path): + """ + Create and return an Anim object from the give path. + + Example: + anim = Animation.fromPath("/temp/example.anim") + print anim.endFrame() + # 14 + + :type path: str + :rtype: Animation + """ + anim = cls() + anim.setPath(path) + anim.read() + return anim + + def __init__(self): + mutils.Pose.__init__(self) + + try: + timeUnit = maya.cmds.currentUnit(q=True, time=True) + linearUnit = maya.cmds.currentUnit(q=True, linear=True) + angularUnit = maya.cmds.currentUnit(q=True, angle=True) + + self.setMetadata("timeUnit", timeUnit) + self.setMetadata("linearUnit", linearUnit) + self.setMetadata("angularUnit", angularUnit) + except NameError as msg: + logger.exception(msg) + + def select(self, objects=None, namespaces=None, **kwargs): + """ + Select the objects contained in the animation. + + :type objects: list[str] or None + :type namespaces: list[str] or None + :rtype: None + """ + selectionSet = mutils.SelectionSet.fromPath(self.poseJsonPath()) + selectionSet.load(objects=objects, namespaces=namespaces, **kwargs) + + def startFrame(self): + """ + Return the start frame for anim object. + + :rtype: int + """ + return self.metadata().get("startFrame") + + def endFrame(self): + """ + Return the end frame for anim object. + + :rtype: int + """ + return self.metadata().get("endFrame") + + def mayaPath(self): + """ + :rtype: str + """ + mayaPath = os.path.join(self.path(), "animation.mb") + if not os.path.exists(mayaPath): + mayaPath = os.path.join(self.path(), "animation.ma") + return mayaPath + + def poseJsonPath(self): + """ + :rtype: str + """ + return os.path.join(self.path(), "pose.json") + + def paths(self): + """ + Return all the paths for Anim object. + + :rtype: list[str] + """ + result = [] + if os.path.exists(self.mayaPath()): + result.append(self.mayaPath()) + + if os.path.exists(self.poseJsonPath()): + result.append(self.poseJsonPath()) + + return result + + def animCurve(self, name, attr, withNamespace=False): + """ + Return the animCurve for the given object name and attribute. + + :type name: str + :type attr: str + :type withNamespace: bool + + :rtype: str + """ + curve = self.attr(name, attr).get("curve", None) + if curve and withNamespace: + curve = Animation.IMPORT_NAMESPACE + ":" + curve + return curve + + def setAnimCurve(self, name, attr, curve): + """ + Set the animCurve for the given object name and attribute. + + :type name: str + :type attr: str + :type curve: str + """ + self.objects()[name].setdefault("attrs", {}) + self.objects()[name]["attrs"].setdefault(attr, {}) + self.objects()[name]["attrs"][attr]["curve"] = curve + + def read(self, path=None): + """ + Read all the data to be used by the Anim object. + + :rtype: None + """ + path = self.poseJsonPath() + + logger.debug("Reading: " + path) + mutils.Pose.read(self, path=path) + logger.debug("Reading Done") + + def isAscii(self, s): + """Check if the given string is a valid ascii string.""" + return all(ord(c) < 128 for c in s) + + @mutils.unifyUndo + @mutils.restoreSelection + def open(self): + """ + The reason we use importing and not referencing is because we + need to modify the imported animation curves and modifying + referenced animation curves is only supported in Maya 2014+ + """ + self.close() # Make sure everything is cleaned before importing + + if not self.isAscii(self.mayaPath()): + msg = "Cannot load animation using non-ascii paths." + raise IOError(msg) + + nodes = maya.cmds.file( + self.mayaPath(), + i=True, + groupLocator=True, + ignoreVersion=True, + returnNewNodes=True, + namespace=Animation.IMPORT_NAMESPACE, + ) + + return nodes + + def close(self): + """ + Clean up all imported nodes, as well as the namespace. + Should be called in a finally block. + """ + nodes = maya.cmds.ls(Animation.IMPORT_NAMESPACE + ":*", r=True) or [] + if nodes: + maya.cmds.delete(nodes) + + # It is important that we remove the imported namespace, + # otherwise another namespace will be created on next + # animation open. + namespaces = maya.cmds.namespaceInfo(ls=True) or [] + + if Animation.IMPORT_NAMESPACE in namespaces: + maya.cmds.namespace(set=':') + maya.cmds.namespace(rm=Animation.IMPORT_NAMESPACE) + + def cleanMayaFile(self, path): + """ + Clean up all commands in the exported maya file that are + not createNode. + """ + results = [] + + if path.endswith(".mb"): + return + + with open(path, "r") as f: + for line in f.readlines(): + if not line.startswith("select -ne"): + results.append(line) + else: + results.append("// End") + break + + with open(path, "w") as f: + f.writelines(results) + + @mutils.timing + @mutils.unifyUndo + @mutils.showWaitCursor + @mutils.restoreSelection + def save( + self, + path, + time=None, + sampleBy=1, + fileType="", + bakeConnected=True + ): + """ + Save all animation data from the objects set on the Anim object. + + :type path: str + :type time: (int, int) or None + :type sampleBy: int + :type fileType: str + :type bakeConnected: bool + + :rtype: None + """ + objects = list(self.objects().keys()) + + fileType = fileType or DEFAULT_FILE_TYPE + + if not time: + time = mutils.selectedObjectsFrameRange(objects) + start, end = time + + # Check selected animation layers + validateAnimLayers() + + # Check frame range + if start is None or end is None: + msg = "Please specify a start and end frame!" + raise AnimationTransferError(msg) + + if start >= end: + msg = "The start frame cannot be greater than or equal to the end frame!" + raise AnimationTransferError(msg) + + # Check if animation exists + if mutils.getDurationFromNodes(objects or [], time=time) <= 0: + msg = "No animation was found on the specified object/s! " \ + "Please create a pose instead!" + raise AnimationTransferError(msg) + + self.setMetadata("endFrame", end) + self.setMetadata("startFrame", start) + + end += 1 + validCurves = [] + deleteObjects = [] + + msg = u"Animation.save(path={0}, time={1}, bakeConnections={2}, sampleBy={3})" + msg = msg.format(path, str(time), str(bakeConnected), str(sampleBy)) + logger.debug(msg) + + try: + if bakeConnected: + maya.cmds.undoInfo(openChunk=True) + mutils.bakeConnected(objects, time=(start, end), sampleBy=sampleBy) + + for name in objects: + if maya.cmds.copyKey(name, time=(start, end), includeUpperBound=False, option="keys"): + dstNodes = duplicateNode(name, "CURVE") + dstNode = dstNodes[0] + deleteObjects.extend(dstNodes) + + if not FIX_SAVE_ANIM_REFERENCE_LOCKED_ERROR: + mutils.disconnectAll(dstNode) + + # Make sure we delete all proxy attributes, otherwise pasteKey will duplicate keys + mutils.Attribute.deleteProxyAttrs(dstNode) + maya.cmds.pasteKey(dstNode) + + attrs = maya.cmds.listAttr(dstNode, unlocked=True, keyable=True) or [] + attrs = list(set(attrs) - set(['translate', 'rotate', 'scale'])) + + for attr in attrs: + dstAttr = mutils.Attribute(dstNode, attr) + dstCurve = dstAttr.animCurve() + + if dstCurve: + + dstCurve = maya.cmds.rename(dstCurve, "CURVE") + deleteObjects.append(dstCurve) + + srcAttr = mutils.Attribute(name, attr) + srcCurve = srcAttr.animCurve() + + if srcCurve: + preInfinity = maya.cmds.getAttr(srcCurve + ".preInfinity") + postInfinity = maya.cmds.getAttr(srcCurve + ".postInfinity") + curveColor = maya.cmds.getAttr(srcCurve + ".curveColor") + useCurveColor = maya.cmds.getAttr(srcCurve + ".useCurveColor") + + maya.cmds.setAttr(dstCurve + ".preInfinity", preInfinity) + maya.cmds.setAttr(dstCurve + ".postInfinity", postInfinity) + maya.cmds.setAttr(dstCurve + ".curveColor", *curveColor[0]) + maya.cmds.setAttr(dstCurve + ".useCurveColor", useCurveColor) + + if maya.cmds.keyframe(dstCurve, query=True, time=(start, end), keyframeCount=True): + self.setAnimCurve(name, attr, dstCurve) + maya.cmds.cutKey(dstCurve, time=(MIN_TIME_LIMIT, start - 1)) + maya.cmds.cutKey(dstCurve, time=(end + 1, end + MAX_TIME_LIMIT)) + validCurves.append(dstCurve) + + fileName = "animation.ma" + if fileType == "mayaBinary": + fileName = "animation.mb" + + mayaPath = os.path.join(path, fileName) + posePath = os.path.join(path, "pose.json") + mutils.Pose.save(self, posePath) + + if validCurves: + maya.cmds.select(validCurves) + logger.info("Saving animation: %s" % mayaPath) + maya.cmds.file(mayaPath, force=True, options='v=0', type=fileType, uiConfiguration=False, exportSelected=True) + self.cleanMayaFile(mayaPath) + + finally: + if bakeConnected: + # HACK! Undo all baked connections. :) + maya.cmds.undoInfo(closeChunk=True) + maya.cmds.undo() + elif deleteObjects: + maya.cmds.delete(deleteObjects) + + self.setPath(path) + + @mutils.timing + @mutils.showWaitCursor + def load( + self, + objects=None, + namespaces=None, + attrs=None, + startFrame=None, + sourceTime=None, + option=None, + connect=False, + mirrorTable=None, + currentTime=None + ): + """ + Load the animation data to the given objects or namespaces. + + :type objects: list[str] + :type namespaces: list[str] + :type startFrame: int + :type sourceTime: (int, int) or None + :type attrs: list[str] + :type option: PasteOption or None + :type connect: bool + :type mirrorTable: mutils.MirrorTable + :type currentTime: bool or None + """ + logger.info(u'Loading: {0}'.format(self.path())) + + connect = bool(connect) # Make false if connect is None + + if not sourceTime: + sourceTime = (self.startFrame(), self.endFrame()) + + if option and option.lower() == "replace all": + option = "replaceCompletely" + + if option is None or option == PasteOption.ReplaceAll: + option = PasteOption.ReplaceCompletely + + self.validate(namespaces=namespaces) + + objects = objects or [] + + logger.debug("Animation.load(objects=%s, option=%s, namespaces=%s, srcTime=%s, currentTime=%s)" % + (len(objects), str(option), str(namespaces), str(sourceTime), str(currentTime))) + + srcObjects = self.objects().keys() + + if mirrorTable: + self.setMirrorTable(mirrorTable) + + valid = False + matches = list(mutils.matchNames(srcObjects=srcObjects, dstObjects=objects, dstNamespaces=namespaces)) + + for srcNode, dstNode in matches: + if dstNode.exists(): + valid = True + break + + if not matches or not valid: + + text = "No objects match when loading data. " \ + "Turn on debug mode to see more details." + + raise mutils.NoMatchFoundError(text) + + # Load the animation data. + srcCurves = self.open() + + try: + maya.cmds.flushUndo() + maya.cmds.undoInfo(openChunk=True) + + if currentTime and startFrame is None: + startFrame = int(maya.cmds.currentTime(query=True)) + + srcTime = findFirstLastKeyframes(srcCurves, sourceTime) + dstTime = moveTime(srcTime, startFrame) + + if option != PasteOption.ReplaceCompletely: + insertKeyframe(srcCurves, srcTime) + + for srcNode, dstNode in matches: + + # Remove the first pipe in-case the object has a parent + dstNode.stripFirstPipe() + + for attr in self.attrs(srcNode.name()): + + # Filter any attributes if the parameter has been set + if attrs is not None and attr not in attrs: + continue + + dstAttr = mutils.Attribute(dstNode.name(), attr) + + if not dstAttr.exists(): + logger.debug('Skipping attribute: The destination attribute "%s" does not exist!' % dstAttr.fullname()) + continue + + if dstAttr.isProxy(): + logger.debug('Skipping attribute: The destination attribute "%s" is a proxy attribute!', dstAttr.fullname()) + continue + + srcCurve = self.animCurve(srcNode.name(), attr, withNamespace=True) + + if srcCurve: + dstAttr.setAnimCurve( + srcCurve, + time=dstTime, + option=option, + source=srcTime, + connect=connect + ) + else: + value = self.attrValue(srcNode.name(), attr) + dstAttr.setStaticKeyframe(value, dstTime, option) + + finally: + self.close() + maya.cmds.undoInfo(closeChunk=True) + + # Return the focus to the Maya window + maya.cmds.setFocus("MayaWindow") + + logger.info(u'Loaded: {0}'.format(self.path())) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/attribute.py b/2023/scripts/animation_tools/studiolibrary/mutils/attribute.py new file mode 100644 index 0000000..27e4b0f --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/attribute.py @@ -0,0 +1,565 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +Example: + +import mutils + +attr = mutils.Attribute("sphere1", "translateX") +attr.set(100) +""" +import logging +from studiovendor import six + +try: + import maya.cmds +except ImportError: + import traceback + traceback.print_exc() + + +logger = logging.getLogger(__name__) + + +VALID_CONNECTIONS = [ + "animCurve", + "animBlend", + "pairBlend", + "character" +] + +VALID_BLEND_ATTRIBUTES = [ + "int", + "long", + "float", + "short", + "double", + "doubleAngle", + "doubleLinear", +] + +VALID_ATTRIBUTE_TYPES = [ + "int", + "long", + "enum", + "bool", + "string", + "float", + "short", + "double", + "doubleAngle", + "doubleLinear", +] + + +class AttributeError(Exception): + """Base class for exceptions in this module.""" + pass + + +class Attribute(object): + + + @classmethod + def listAttr(cls, name, **kwargs): + """ + Return a list of Attribute from the given name and matching criteria. + + If no flags are specified all attributes are listed. + + :rtype: list[Attribute] + """ + attrs = maya.cmds.listAttr(name, **kwargs) or [] + return [cls(name, attr) for attr in attrs] + + @classmethod + def deleteProxyAttrs(cls, name): + """Delete all the proxy attributes for the given object name.""" + attrs = cls.listAttr(name, unlocked=True, keyable=True) or [] + for attr in attrs: + if attr.isProxy(): + attr.delete() + + def __init__(self, name, attr=None, value=None, type=None, cache=True): + """ + :type name: str + :type attr: str | None + :type type: str | None + :type value: object | None + :type cache: bool + """ + if "." in name: + name, attr = name.split(".") + + if attr is None: + msg = "Cannot initialise attribute instance without a given attr." + raise AttributeError(msg) + + self._name = six.text_type(name) + self._attr = six.text_type(attr) + self._type = type + self._value = value + self._cache = cache + self._fullname = None + + def __str__(self): + """ + :rtype: str + """ + return str(self.toDict()) + + def name(self): + """ + Return the Maya object name for the attribute. + + :rtype: str + """ + return self._name + + def attr(self): + """ + Return the attribute name. + + :rtype: str + """ + return self._attr + + def isLocked(self): + """ + Return true if the attribute is locked. + + :rtype: bool + """ + return maya.cmds.getAttr(self.fullname(), lock=True) + + def isUnlocked(self): + """ + Return true if the attribute is unlocked. + + :rtype: bool + """ + return not self.isLocked() + + def toDict(self): + """ + Return a dictionary of the attribute object. + + :rtype: dict + """ + result = { + "type": self.type(), + "value": self.value(), + "fullname": self.fullname(), + } + return result + + def isValid(self): + """ + Return true if the attribute type is valid. + + :rtype: bool + """ + return self.type() in VALID_ATTRIBUTE_TYPES + + def isProxy(self): + """ + Return true if the attribute is a proxy + + :rtype: bool + """ + if not maya.cmds.addAttr(self.fullname(), query=True, exists=True): + return False + + return maya.cmds.addAttr(self.fullname(), query=True, usedAsProxy=True) + + def delete(self): + """Delete the attribute""" + maya.cmds.deleteAttr(self.fullname()) + + def exists(self): + """ + Return true if the object and attribute exists in the scene. + + :rtype: bool + """ + return maya.cmds.objExists(self.fullname()) + + def prettyPrint(self): + """ + Print the command for setting the attribute value + """ + msg = 'maya.cmds.setAttr("{0}", {1})' + msg = msg.format(self.fullname(), self.value()) + print(msg) + + def clearCache(self): + """ + Clear all cached values + """ + self._type = None + self._value = None + + def update(self): + """ + This method will be deprecated. + """ + self.clearCache() + + def query(self, **kwargs): + """ + Convenience method for Maya's attribute query command + + :rtype: object + """ + return maya.cmds.attributeQuery(self.attr(), node=self.name(), **kwargs) + + def listConnections(self, **kwargs): + """ + Convenience method for Maya's list connections command + + :rtype: list[str] + """ + return maya.cmds.listConnections(self.fullname(), **kwargs) + + def sourceConnection(self, **kwargs): + """ + Return the source connection for this attribute. + + :rtype: str | None + """ + try: + return self.listConnections(destination=False, **kwargs)[0] + except IndexError: + return None + + def fullname(self): + """ + Return the name with the attr name. + + :rtype: str + """ + if self._fullname is None: + self._fullname = '{0}.{1}'.format(self.name(), self.attr()) + return self._fullname + + def value(self): + """ + Return the value of the attribute. + + :rtype: float | str | list + """ + if self._value is None or not self._cache: + + try: + self._value = maya.cmds.getAttr(self.fullname()) + except Exception: + msg = 'Cannot GET attribute VALUE for "{0}"' + msg = msg.format(self.fullname()) + logger.exception(msg) + + return self._value + + def type(self): + """ + Return the type of data currently in the attribute. + + :rtype: str + """ + if self._type is None: + + try: + self._type = maya.cmds.getAttr(self.fullname(), type=True) + self._type = six.text_type(self._type) + except Exception: + msg = 'Cannot GET attribute TYPE for "{0}"' + msg = msg.format(self.fullname()) + logger.exception(msg) + + return self._type + + def set(self, value, blend=100, key=False, clamp=True, additive=False): + """ + Set the value for the attribute. + + :type key: bool + :type clamp: bool + :type value: float | str | list + :type blend: float + """ + try: + if additive and self.type() != 'bool': + if self.attr().startswith('scale'): + value = self.value() * (1 + (value - 1) * (blend/100.0)) + else: + value = self.value() + value * (blend/100.0) + elif int(blend) == 0: + value = self.value() + else: + _value = (value - self.value()) * (blend/100.00) + value = self.value() + _value + except TypeError as error: + msg = 'Cannot BLEND or ADD attribute {0}: Error: {1}' + msg = msg.format(self.fullname(), error) + logger.debug(msg) + + try: + if self.type() in ["string"]: + maya.cmds.setAttr(self.fullname(), value, type=self.type()) + elif self.type() in ["list", "matrix"]: + maya.cmds.setAttr(self.fullname(), *value, type=self.type()) + else: + maya.cmds.setAttr(self.fullname(), value, clamp=clamp) + except (ValueError, RuntimeError) as error: + msg = "Cannot SET attribute {0}: Error: {1}" + msg = msg.format(self.fullname(), error) + logger.debug(msg) + + try: + if key: + self.setKeyframe(value=value) + except TypeError as error: + msg = 'Cannot KEY attribute {0}: Error: {1}' + msg = msg.format(self.fullname(), error) + logger.debug(msg) + + def setKeyframe(self, value, respectKeyable=True, **kwargs): + """ + Set a keyframe with the given value. + + :value: object + :respectKeyable: bool + :rtype: None + """ + if self.query(minExists=True): + minimum = self.query(minimum=True)[0] + if value < minimum: + value = minimum + + if self.query(maxExists=True): + maximum = self.query(maximum=True)[0] + if value > maximum: + value = maximum + + kwargs.setdefault("value", value) + kwargs.setdefault("respectKeyable", respectKeyable) + + maya.cmds.setKeyframe(self.fullname(), **kwargs) + + def setStaticKeyframe(self, value, time, option): + """ + Set a static keyframe at the given time. + + :type value: object + :type time: (int, int) + :type option: PasteOption + """ + if option == "replaceCompletely": + maya.cmds.cutKey(self.fullname()) + self.set(value, key=False) + + # This should be changed to only look for animation. + # Also will need to support animation layers ect... + elif self.isConnected(): + + # TODO: Should also support static attrs when there is animation. + if option == "replace": + maya.cmds.cutKey(self.fullname(), time=time) + self.insertStaticKeyframe(value, time) + + elif option == "replace": + self.insertStaticKeyframe(value, time) + + else: + self.set(value, key=False) + + def insertStaticKeyframe(self, value, time): + """ + Insert a static keyframe at the given time with the given value. + + :type value: float | str + :type time: (int, int) + :rtype: None + """ + startTime, endTime = time + duration = endTime - startTime + try: + # Offset all keyframes from the start position. + maya.cmds.keyframe(self.fullname(), relative=True, time=(startTime, 1000000), timeChange=duration) + + # Set a key at the given start and end time + self.setKeyframe(value, time=(startTime, startTime), ott='step') + self.setKeyframe(value, time=(endTime, endTime), itt='flat', ott='flat') + + # Set the tangent for the next keyframe to flat + nextFrame = maya.cmds.findKeyframe(self.fullname(), time=(endTime, endTime), which='next') + maya.cmds.keyTangent(self.fullname(), time=(nextFrame, nextFrame), itt='flat') + except TypeError as error: + msg = "Cannot insert static key frame for attribute {0}: Error: {1}" + msg = msg.format(self.fullname(), error) + logger.debug(msg) + + def setAnimCurve(self, curve, time, option, source=None, connect=False): + """ + Set/Paste the give animation curve to this attribute. + + :type curve: str + :type option: PasteOption + :type time: (int, int) + :type source: (int, int) + :type connect: bool + :rtype: None + """ + fullname = self.fullname() + startTime, endTime = time + + if self.isProxy(): + logger.debug("Cannot set anim curve for proxy attribute") + return + + if not self.exists(): + logger.debug("Attr does not exists") + return + + if self.isLocked(): + logger.debug("Cannot set anim curve when the attr locked") + return + + if source is None: + first = maya.cmds.findKeyframe(curve, which='first') + last = maya.cmds.findKeyframe(curve, which='last') + source = (first, last) + + # We run the copy key command twice to check we have a valid curve. + # It needs to run before the cutKey command, otherwise if it fails + # we have cut keys for no reason! + success = maya.cmds.copyKey(curve, time=source) + if not success: + msg = "Cannot copy keys from the anim curve {0}" + msg = msg.format(curve) + logger.debug(msg) + return + + if option == "replace": + maya.cmds.cutKey(fullname, time=time) + else: + time = (startTime, startTime) + + try: + # Update the clip board with the give animation curve + maya.cmds.copyKey(curve, time=source) + + # Note: If the attribute is connected to referenced + # animation then the following command will not work. + maya.cmds.pasteKey(fullname, option=option, time=time, connect=connect) + + if option == "replaceCompletely": + + # The pasteKey cmd doesn't support all anim attributes + # so we need to manually set theses. + dstCurve = self.animCurve() + if dstCurve: + curveColor = maya.cmds.getAttr(curve + ".curveColor") + preInfinity = maya.cmds.getAttr(curve + ".preInfinity") + postInfinity = maya.cmds.getAttr(curve + ".postInfinity") + useCurveColor = maya.cmds.getAttr(curve + ".useCurveColor") + + maya.cmds.setAttr(dstCurve + ".preInfinity", preInfinity) + maya.cmds.setAttr(dstCurve + ".postInfinity", postInfinity) + maya.cmds.setAttr(dstCurve + ".curveColor", *curveColor[0]) + maya.cmds.setAttr(dstCurve + ".useCurveColor", useCurveColor) + + except RuntimeError: + msg = 'Cannot paste anim curve "{0}" to attribute "{1}"' + msg = msg.format(curve, fullname) + logger.exception(msg) + + def animCurve(self): + """ + Return the connected animation curve. + + :rtype: str | None + """ + result = None + + if self.exists(): + + n = self.listConnections(plugs=True, destination=False) + + if n and "animCurve" in maya.cmds.nodeType(n): + result = n + + elif n and "character" in maya.cmds.nodeType(n): + n = maya.cmds.listConnections(n, plugs=True, + destination=False) + if n and "animCurve" in maya.cmds.nodeType(n): + result = n + + if result: + return result[0].split(".")[0] + + def isConnected(self, ignoreConnections=None): + """ + Return true if the attribute is connected. + + :type ignoreConnections: list[str] + :rtype: bool + """ + if ignoreConnections is None: + ignoreConnections = [] + try: + connection = self.listConnections(destination=False) + except ValueError: + return False + + if connection: + if ignoreConnections: + connectionType = maya.cmds.nodeType(connection) + for ignoreType in ignoreConnections: + if connectionType.startswith(ignoreType): + return False + return True + else: + return False + + def isBlendable(self): + """ + Return true if the attribute can be blended. + + :rtype: bool + """ + return self.type() in VALID_BLEND_ATTRIBUTES + + def isSettable(self, validConnections=None): + """ + Return true if the attribute can be set. + + :type validConnections: list[str] + :rtype: bool + """ + if validConnections is None: + validConnections = VALID_CONNECTIONS + + if not self.exists(): + return False + + if not maya.cmds.listAttr(self.fullname(), unlocked=True, keyable=True, multi=True, scalar=True): + return False + + connection = self.listConnections(destination=False) + if connection: + connectionType = maya.cmds.nodeType(connection) + for validType in validConnections: + if connectionType.startswith(validType): + return True + return False + else: + return True diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/cmds.py b/2023/scripts/animation_tools/studiolibrary/mutils/cmds.py new file mode 100644 index 0000000..d88b9a4 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/cmds.py @@ -0,0 +1,425 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging +import platform +import traceback + +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +try: + import maya.mel + import maya.cmds +except ImportError: + traceback.print_exc() + +import mutils + + +logger = logging.getLogger(__name__) + + +class MayaUtilsError(Exception): + """Base class for exceptions in this module.""" + + +class ObjectsError(MayaUtilsError): + pass + + +class SelectionError(MayaUtilsError): + pass + + +class NoMatchFoundError(MayaUtilsError): + pass + + +class NoObjectFoundError(MayaUtilsError): + pass + + +class MoreThanOneObjectFoundError(MayaUtilsError): + pass + + +class ModelPanelNotInFocusError(MayaUtilsError): + pass + + +def system(): + """ + Return the current platform in lowercase. + + :rtype: str + """ + return platform.system().lower() + + +def isMac(): + """ + Return True if the current OS is Mac. + + :rtype: bool + """ + return system().startswith("os") or \ + system().startswith("mac") or \ + system().startswith("darwin") + + +def isLinux(): + """ + Return True if the current OS is linux. + + :rtype: bool + """ + return system().lower().startswith("lin") + + +def isWindows(): + """ + Return True if the current OS is windows. + + :rtype: bool + """ + return system().lower().startswith("win") + + +def isMaya(): + """ + Return True if the current python session is in Maya. + + :rtype: bool + """ + try: + import maya.cmds + maya.cmds.about(batch=True) + return True + except ImportError: + return False + + +def selectionModifiers(): + """ + Return a dictionary of the current key modifiers + + :rtype: dict + """ + result = {"add": False, "deselect": False} + modifiers = QtWidgets.QApplication.keyboardModifiers() + + if modifiers == QtCore.Qt.ShiftModifier: + result["deselect"] = True + elif modifiers == QtCore.Qt.ControlModifier: + result["add"] = True + + return result + + +def ls(*args, **kwargs): + """ + List all the node objects for the given options. + + :type args: list + :type kwargs: dict + """ + return [mutils.Node(name) for name in maya.cmds.ls(*args, **kwargs) or []] + + +def listAttr(name, **kwargs): + """ + List all the attributes for the given object name. + + :type name: str + :type kwargs: str + :rtype: list[mutils.Attribute] + """ + attrs = maya.cmds.listAttr(name, **kwargs) or [] + attrs = list(set(attrs)) + return [mutils.Attribute(name, attr) for attr in attrs] + + +def disconnectAll(name): + """ + Disconnect all connections from the given object name. + + :type name: str + """ + plugins = maya.cmds.listConnections(name, plugs=True, source=False) or [] + + for plug in plugins: + source, = maya.cmds.listConnections(plug, plugs=True) + maya.cmds.disconnectAttr(source, plug) + + +def animCurve(fullname): + """ + Return the animation curve name for the give attribute. + + :type fullname: str or None + :rtype: str or None + """ + attribute = mutils.Attribute(fullname) + return attribute.animCurve() + + +def deleteUnknownNodes(): + """Delete all unknown nodes in the Maya scene.""" + nodes = maya.cmds.ls(type="unknown") + if nodes: + for node in nodes: + if maya.cmds.objExists(node) and \ + maya.cmds.referenceQuery(node, inr=True): + maya.cmds.delete(node) + + +def currentModelPanel(): + """ + Get the current model panel name. + + :rtype: str or None + """ + currentPanel = maya.cmds.getPanel(withFocus=True) + currentPanelType = maya.cmds.getPanel(typeOf=currentPanel) + + if currentPanelType not in ['modelPanel']: + return None + + return currentPanel + + +def getBakeAttrs(objects): + """ + Get the attributes that are not connected to an animation curve. + + :type objects: list[str] + :rtype: list[str] + """ + result = [] + + if not objects: + raise Exception("No objects specified") + + connections = maya.cmds.listConnections( + objects, + plugs=True, + source=True, + connections=True, + destination=False + ) or [] + + for i in range(0, len(connections), 2): + dstObj = connections[i] + srcObj = connections[i + 1] + + nodeType = maya.cmds.nodeType(srcObj) + + if "animCurve" not in nodeType: + result.append(dstObj) + + return result + + +def bakeConnected(objects, time, sampleBy=1): + """ + Bake the given objects. + + :type objects: list[str] + :type time: (int, int) + :type sampleBy: int + """ + bakeAttrs = getBakeAttrs(objects) + + if bakeAttrs: + maya.cmds.bakeResults( + bakeAttrs, + time=time, + shape=False, + simulation=True, + sampleBy=sampleBy, + controlPoints=False, + minimizeRotation=True, + bakeOnOverrideLayer=False, + preserveOutsideKeys=False, + sparseAnimCurveBake=False, + disableImplicitControl=True, + removeBakedAttributeFromLayer=False, + ) + else: + logger.error("Cannot find any connection to bake!") + + +def getSelectedObjects(): + """ + Get a list of the selected objects in Maya. + + :rtype: list[str] + :raises: mutils.SelectionError: + """ + selection = maya.cmds.ls(selection=True) + if not selection: + raise mutils.SelectionError("No objects selected!") + return selection + + +def getSelectedAttrs(): + """ + Get the attributes that are selected in the channel box. + + :rtype: list[str] + """ + attributes = maya.cmds.channelBox( + "mainChannelBox", + query=True, + selectedMainAttributes=True + ) + + if attributes is not None: + attributes = str(attributes) + attributes = attributes.replace("tx", "translateX") + attributes = attributes.replace("ty", "translateY") + attributes = attributes.replace("tz", "translateZ") + attributes = attributes.replace("rx", "rotateX") + attributes = attributes.replace("ry", "rotateY") + attributes = attributes.replace("rz", "rotateZ") + attributes = eval(attributes) + + return attributes + + +def currentFrameRange(): + """ + Get the current first and last frame depending on the context. + + :rtype: (int, int) + """ + start, end = selectedFrameRange() + + if end == start: + start, end = selectedObjectsFrameRange() + + if start == end: + start, end = playbackFrameRange() + + return start, end + + +def playbackFrameRange(): + """ + Get the first and last frame from the play back options. + + :rtype: (int, int) + """ + start = maya.cmds.playbackOptions(query=True, min=True) + end = maya.cmds.playbackOptions(query=True, max=True) + return start, end + + +def selectedFrameRange(): + """ + Get the first and last frame from the play back slider. + + :rtype: (int, int) + """ + result = maya.mel.eval("timeControl -q -range $gPlayBackSlider") + start, end = result.replace('"', "").split(":") + start, end = int(start), int(end) + if end - start == 1: + end = start + return start, end + + +def selectedObjectsFrameRange(objects=None): + """ + Get the first and last animation frame from the given objects. + + :type objects: list[str] + :rtype: (int, int) + """ + start = 0 + end = 0 + + if not objects: + objects = maya.cmds.ls(selection=True) or [] + + if objects: + start = int(maya.cmds.findKeyframe(objects, which='first')) + end = int(maya.cmds.findKeyframe(objects, which='last')) + + return start, end + + +def getDurationFromNodes(objects, time=None): + """ + Get the duration of the animation from the given object names. + + :type time: [str, str] + :type objects: list[str] + :rtype: float + """ + if objects: + + first = maya.cmds.findKeyframe(objects, which='first') + last = maya.cmds.findKeyframe(objects, which='last') + + if time: + startKey = maya.cmds.findKeyframe(objects, time=(time[0], time[0]), which="next") + if startKey > time[1] or startKey < time[0]: + return 0 + + if first == last: + if maya.cmds.keyframe(objects, query=True, keyframeCount=True) > 0: + return 1 + else: + return 0 + + return last - first + else: + return 0 + + +def getReferencePaths(objects, withoutCopyNumber=False): + """ + Get the reference paths for the given objects. + + :type objects: list[str] + :type withoutCopyNumber: bool + :rtype: list[str] + """ + paths = [] + for obj in objects: + if maya.cmds.referenceQuery(obj, isNodeReferenced=True): + paths.append(maya.cmds.referenceQuery(obj, f=True, wcn=withoutCopyNumber)) + + return list(set(paths)) + + +def getReferenceData(objects): + """ + Get the reference paths for the given objects. + + :type objects: list[str] + :rtype: list[dict] + """ + data = [] + paths = getReferencePaths(objects) + + for path in paths: + data.append({ + "filename": path, + "unresolved": maya.cmds.referenceQuery(path, filename=True, withoutCopyNumber=True), + "namespace": maya.cmds.file(path, q=True, namespace=True), + "node": maya.cmds.referenceQuery(path, referenceNode=True) + }) + + return data diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/decorators.py b/2023/scripts/animation_tools/studiolibrary/mutils/decorators.py new file mode 100644 index 0000000..8e15a79 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/decorators.py @@ -0,0 +1,166 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import time +import logging + +try: + import maya.cmds +except ImportError: + import traceback + traceback.print_exc() + + +logger = logging.getLogger(__name__) + + +__all__ = [ + "timing", + "unifyUndo", + "disableUndo", + "disableViews", + "disableAutoKey", + "showWaitCursor", + "restoreSelection", + "restoreCurrentTime", +] + + +def timing(fn): + + def wrapped(*args, **kwargs): + time1 = time.time() + ret = fn(*args, **kwargs) + time2 = time.time() + logger.debug('%s function took %0.5f sec' % (fn.__name__, (time2 - time1))) + return ret + + return wrapped + + +def unifyUndo(fn): + + def wrapped(*args, **kwargs): + maya.cmds.undoInfo(openChunk=True) + try: + return fn(*args, **kwargs) + finally: + maya.cmds.undoInfo(closeChunk=True) + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped + + +def disableUndo(fn): + + def wrapped(*args, **kwargs): + initialUndoState = maya.cmds.undoInfo(q=True, state=True) + maya.cmds.undoInfo(stateWithoutFlush=False) + try: + return fn(*args, **kwargs) + finally: + maya.cmds.undoInfo(stateWithoutFlush=initialUndoState) + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped + + +def disableAutoKey(fn): + + def wrapped(*args, **kwargs): + initialState = maya.cmds.autoKeyframe(query=True, state=True) + maya.cmds.autoKeyframe(edit=True, state=False) + try: + return fn(*args, **kwargs) + finally: + maya.cmds.autoKeyframe(edit=True, state=initialState) + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped + + +def restoreSelection(fn): + + def wrapped(*args, **kwargs): + selection = maya.cmds.ls(selection=True) or [] + try: + return fn(*args, **kwargs) + finally: + if selection: + maya.cmds.select(selection) + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped + + +def restoreCurrentTime(fn): + + def wrapped(*args, **kwargs): + initialTime = maya.cmds.currentTime(query=True) + try: + return fn(*args, **kwargs) + finally: + maya.cmds.currentTime(initialTime, edit=True) + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped + + +def showWaitCursor(fn): + + def wrapped(*args, **kwargs): + maya.cmds.waitCursor(state=True) + try: + return fn(*args, **kwargs) + finally: + maya.cmds.waitCursor(state=False) + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped + + +def disableViews(fn): + + def wrapped(*args, **kwargs): + modelPanels = maya.cmds.getPanel(vis=True) + emptySelConn = maya.cmds.selectionConnection() + + for panel in modelPanels: + if maya.cmds.getPanel(to=panel) == 'modelPanel': + maya.cmds.isolateSelect(panel, state=True) + maya.cmds.modelEditor(panel, e=True, mlc=emptySelConn) + + try: + return fn(*args, **kwargs) + finally: + for panel in modelPanels: + if maya.cmds.getPanel(to=panel) == 'modelPanel': + maya.cmds.isolateSelect(panel, state=False) + + maya.cmds.deleteUI(emptySelConn) + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/gui/__init__.py b/2023/scripts/animation_tools/studiolibrary/mutils/gui/__init__.py new file mode 100644 index 0000000..7cf2579 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/gui/__init__.py @@ -0,0 +1,52 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtCompat +from studiovendor.Qt import QtWidgets + +try: + import maya.OpenMayaUI as omui +except ImportError as error: + print(error) + +from .framerangemenu import FrameRangeMenu +from .framerangemenu import showFrameRangeMenu +from .modelpanelwidget import ModelPanelWidget +from .thumbnailcapturedialog import * +from .thumbnailcapturemenu import ThumbnailCaptureMenu + + +def mayaWindow(): + """ + Return the Maya main window as a QMainWindow object. + + :rtype: QMainWindow + """ + mainWindowPtr = omui.MQtUtil.mainWindow() + return QtCompat.wrapInstance(mainWindowPtr, QtWidgets.QMainWindow) + + +def makeMayaStandaloneWindow(w): + """ + Make a standalone window, though parented under Maya's mainWindow. + + The parenting under Maya's mainWindow is done so that the QWidget will + not auto-destroy itself when the instance variable goes out of scope. + """ + # Parent under the main Maya window + w.setParent(mayaWindow()) + + # Make this widget appear as a standalone window + w.setWindowFlags(QtCore.Qt.Window) + w.raise_() + w.show() diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/gui/framerangemenu.py b/2023/scripts/animation_tools/studiolibrary/mutils/gui/framerangemenu.py new file mode 100644 index 0000000..f35778f --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/gui/framerangemenu.py @@ -0,0 +1,67 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtWidgets + +import mutils + + +__all__ = ["FrameRangeMenu", "showFrameRangeMenu"] + + +class FrameRangeAction(QtWidgets.QAction): + def __init__(self, *args): + super(FrameRangeAction, self).__init__(*args) + + self._frameRange = (0, 100) + + def frameRange(self): + return self._frameRange + + def setFrameRange(self, frameRange): + self._frameRange = frameRange + + +class FrameRangeMenu(QtWidgets.QMenu): + + def __init__(self, parent=None): + super(FrameRangeMenu, self).__init__(parent) + + action = FrameRangeAction("From Timeline", self) + action.setFrameRange(mutils.playbackFrameRange()) + self.addAction(action) + + action = FrameRangeAction("From Selected Timeline", self) + action.setFrameRange(mutils.selectedFrameRange()) + self.addAction(action) + + action = FrameRangeAction("From Selected Objects", self) + action.setFrameRange(mutils.selectedObjectsFrameRange()) + self.addAction(action) + + +def showFrameRangeMenu(): + """ + Show the frame range menu at the current cursor position. + + :rtype: QtWidgets.QAction + """ + menu = FrameRangeMenu() + position = QtGui.QCursor().pos() + action = menu.exec_(position) + return action + + +if __name__ == "__main__": + action = showFrameRangeMenu() + print(action.frameRange()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/gui/modelpanelwidget.py b/2023/scripts/animation_tools/studiolibrary/mutils/gui/modelpanelwidget.py new file mode 100644 index 0000000..8bb8e8c --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/gui/modelpanelwidget.py @@ -0,0 +1,100 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import mutils +import mutils.gui + +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +try: + import maya.cmds + import maya.OpenMayaUI as mui + isMaya = True +except ImportError: + isMaya = False + + +__all__ = ["ModelPanelWidget"] + + +class ModelPanelWidget(QtWidgets.QWidget): + + def __init__(self, parent, name="capturedModelPanel", **kwargs): + super(ModelPanelWidget, self).__init__(parent, **kwargs) + + uniqueName = name + str(id(self)) + self.setObjectName(uniqueName + 'Widget') + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setObjectName(uniqueName + "Layout") + self.setLayout(layout) + + maya.cmds.setParent(layout.objectName()) + self._modelPanel = maya.cmds.modelPanel(uniqueName, label="ModelPanel") + self.setModelPanelOptions() + + def setModelPanelOptions(self): + + modelPanel = self.name() + + maya.cmds.modelEditor(modelPanel, edit=True, allObjects=False) + maya.cmds.modelEditor(modelPanel, edit=True, grid=False) + maya.cmds.modelEditor(modelPanel, edit=True, dynamics=False) + maya.cmds.modelEditor(modelPanel, edit=True, activeOnly=False) + maya.cmds.modelEditor(modelPanel, edit=True, manipulators=False) + maya.cmds.modelEditor(modelPanel, edit=True, headsUpDisplay=False) + maya.cmds.modelEditor(modelPanel, edit=True, selectionHiliteDisplay=False) + + maya.cmds.modelEditor(modelPanel, edit=True, polymeshes=True) + maya.cmds.modelEditor(modelPanel, edit=True, nurbsSurfaces=True) + maya.cmds.modelEditor(modelPanel, edit=True, subdivSurfaces=True) + maya.cmds.modelEditor(modelPanel, edit=True, displayTextures=True) + maya.cmds.modelEditor(modelPanel, edit=True, displayAppearance="smoothShaded") + + currentModelPanel = mutils.currentModelPanel() + + if currentModelPanel: + camera = maya.cmds.modelEditor(currentModelPanel, query=True, camera=True) + displayLights = maya.cmds.modelEditor(currentModelPanel, query=True, displayLights=True) + displayTextures = maya.cmds.modelEditor(currentModelPanel, query=True, displayTextures=True) + + maya.cmds.modelEditor(modelPanel, edit=True, camera=camera) + maya.cmds.modelEditor(modelPanel, edit=True, displayLights=displayLights) + maya.cmds.modelEditor(modelPanel, edit=True, displayTextures=displayTextures) + + def name(self): + return self._modelPanel + + def modelPanel(self): + ptr = mui.MQtUtil.findControl(self._modelPanel) + return mutils.gui.wrapInstance(ptr, QtWidgets.QWidget) + + def barLayout(self): + name = maya.cmds.modelPanel(self._modelPanel, query=True, barLayout=True) + ptr = mui.MQtUtil.findControl(name) + return mutils.gui.wrapInstance(ptr, QtCore.QObject) + + def hideBarLayout(self): + self.barLayout().hide() + + def hideMenuBar(self): + maya.cmds.modelPanel(self._modelPanel, edit=True, menuBarVisible=False) + + def setCamera(self, name): + maya.cmds.modelPanel(self._modelPanel, edit=True, cam=name) + + +if __name__ == "__main__": + widget = ModelPanelWidget(None, "modelPanel") + widget.show() diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/gui/thumbnailcapturedialog.py b/2023/scripts/animation_tools/studiolibrary/mutils/gui/thumbnailcapturedialog.py new file mode 100644 index 0000000..0be4dfd --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/gui/thumbnailcapturedialog.py @@ -0,0 +1,290 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +The capture dialog is used for creating thumbnails and thumbnail playblasts. + +import mutils.gui +print mutils.gui.capture("c:/temp/test.jpg", startFrame=1, endFrame=100) +# c:/temp/test.0001.jpg +""" + +import os +import shutil + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +try: + import maya.cmds +except Exception: + import traceback + traceback.print_exc() + +import studioqt + +import mutils.gui +import mutils.gui.modelpanelwidget + + +__all__ = [ + "thumbnailCapture", + "ThumbnailCaptureDialog", + ] + + +_instance = None + + +def thumbnailCapture( + path, + startFrame=None, + endFrame=None, + step=1, + clearCache=False, + captured=None, + show=False, + modifier=True, +): + """ + Capture a playblast and save it to the given path. + + :type path: str + :type startFrame: int or None + :type endFrame: int or None + :type step: int + :type clearCache: bool + :type captured: func or None + :rtype: ThumbnailCaptureDialog + """ + + global _instance + + def _clearCache(): + dirname = os.path.dirname(path) + if os.path.exists(dirname): + shutil.rmtree(dirname) + + if _instance: + _instance.close() + + d = mutils.gui.ThumbnailCaptureDialog( + path=path, + startFrame=startFrame, + endFrame=endFrame, + step=step, + ) + + if captured: + d.captured.connect(captured) + + if clearCache: + d.capturing.connect(_clearCache) + + d.show() + + if not show and not (modifier and studioqt.isControlModifier()): + d.capture() + d.close() + + _instance = d + + return _instance + + +class ThumbnailCaptureDialog(QtWidgets.QDialog): + + DEFAULT_WIDTH = 250 + DEFAULT_HEIGHT = 250 + + captured = QtCore.Signal(str) + capturing = QtCore.Signal(str) + + def __init__(self, path="", parent=None, startFrame=None, endFrame=None, step=1): + """ + :type path: str + :type parent: QtWidgets.QWidget + :type startFrame: int + :type endFrame: int + :type step: int + """ + parent = parent or mutils.gui.mayaWindow() + + QtWidgets.QDialog.__init__(self, parent) + + self._path = path + self._step = step + self._endFrame = None + self._startFrame = None + self._capturedPath = None + + if endFrame is None: + endFrame = int(maya.cmds.currentTime(query=True)) + + if startFrame is None: + startFrame = int(maya.cmds.currentTime(query=True)) + + self.setEndFrame(endFrame) + self.setStartFrame(startFrame) + + self.setObjectName("CaptureWindow") + self.setWindowTitle("Capture Window") + + self._captureButton = QtWidgets.QPushButton("Capture") + self._captureButton.clicked.connect(self.capture) + + self._modelPanelWidget = mutils.gui.modelpanelwidget.ModelPanelWidget(self) + + vbox = QtWidgets.QVBoxLayout() + vbox.setObjectName(self.objectName() + "Layout") + vbox.addWidget(self._modelPanelWidget) + vbox.addWidget(self._captureButton) + + self.setLayout(vbox) + + width = (self.DEFAULT_WIDTH * 1.5) + height = (self.DEFAULT_HEIGHT * 1.5) + 50 + + self.setWidthHeight(width, height) + self.centerWindow() + + def path(self): + """ + Return the destination path. + + :rtype: str + """ + return self._path + + def setPath(self, path): + """ + Set the destination path. + + :type path: str + """ + self._path = path + + def endFrame(self): + """ + Return the end frame of the playblast. + + :rtype: int + """ + return self._endFrame + + def setEndFrame(self, endFrame): + """ + Specify the end frame of the playblast. + + :type endFrame: int + """ + self._endFrame = int(endFrame) + + def startFrame(self): + """ + Return the start frame of the playblast. + + :rtype: int + """ + return self._startFrame + + def setStartFrame(self, startFrame): + """ + Specify the start frame of the playblast. + + :type startFrame: int + """ + self._startFrame = int(startFrame) + + def step(self): + """ + Return the step amount of the playblast. + + Example: + if step is set to 2 it will playblast every second frame. + + :rtype: int + """ + return self._step + + def setStep(self, step): + """ + Set the step amount of the playblast. + + :type step: int + """ + self._step = step + + def setWidthHeight(self, width, height): + """ + Set the width and height of the window. + + :type width: int + :type height: int + :rtype: None + """ + x = self.geometry().x() + y = self.geometry().y() + self.setGeometry(x, y, width, height) + + def centerWindow(self): + """ + Center the widget to the center of the desktop. + + :rtype: None + """ + geometry = self.frameGeometry() + pos = QtGui.QCursor.pos() + screen = QtWidgets.QApplication.screenAt(pos) + centerPoint = screen.availableGeometry().center() + geometry.moveCenter(centerPoint) + self.move(geometry.topLeft()) + + def capturedPath(self): + """ + Return the location of the captured playblast. + + :rtype: + """ + return self._capturedPath + + def capture(self): + """ + Capture a playblast and save it to the given path. + + :rtype: None + """ + path = self.path() + + self.capturing.emit(path) + + modelPanel = self._modelPanelWidget.name() + startFrame = self.startFrame() + endFrame = self.endFrame() + step = self.step() + width = self.DEFAULT_WIDTH + height = self.DEFAULT_HEIGHT + + self._capturedPath = mutils.playblast.playblast( + path, + modelPanel, + startFrame, + endFrame, + width, + height, + step=step, + ) + + self.accept() + + self.captured.emit(self._capturedPath) + return self._capturedPath diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/gui/thumbnailcapturemenu.py b/2023/scripts/animation_tools/studiolibrary/mutils/gui/thumbnailcapturemenu.py new file mode 100644 index 0000000..f87487a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/gui/thumbnailcapturemenu.py @@ -0,0 +1,149 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import shutil +import logging + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import mutils.gui + +import studiolibrary.widgets + + +__all__ = [ + "ThumbnailCaptureMenu", + "testThumbnailCaptureMenu" +] + + +logger = logging.getLogger(__name__) + + +class ThumbnailCaptureMenu(QtWidgets.QMenu): + + captured = QtCore.Signal(str) + + def __init__(self, path, force=False, parent=None): + """ + Thumbnail capture menu. + + :type path: str + :type force: bool + :type parent: None or QtWidgets.QWidget + """ + QtWidgets.QMenu.__init__(self, parent) + + self._path = path + self._force = force + + changeImageAction = QtWidgets.QAction('Capture new image', self) + changeImageAction.triggered.connect(self.capture) + self.addAction(changeImageAction) + + changeImageAction = QtWidgets.QAction('Show Capture window', self) + changeImageAction.triggered.connect(self.showCaptureWindow) + self.addAction(changeImageAction) + + loadImageAction = QtWidgets.QAction('Load image from disk', self) + loadImageAction.triggered.connect(self.showLoadImageDialog) + self.addAction(loadImageAction) + + def path(self): + """ + Return the thumbnail path on disc. + + :rtype: str + """ + return self._path + + def showWarningDialog(self): + """Show a warning dialog for overriding the previous thumbnail.""" + title = "Override Thumbnail" + + text = u"This action will delete the previous thumbnail. The " \ + u"previous image cannot be backed up. Do you want to " \ + u"confirm the action to take a new image and delete " \ + u"the previous one?" + + clickedButton = studiolibrary.widgets.MessageBox.warning( + self.parent(), + title=title, + text=text, + enableDontShowCheckBox=True, + ) + + if clickedButton != QtWidgets.QDialogButtonBox.StandardButton.Yes: + raise Exception("Dialog was canceled!") + + def showCaptureWindow(self): + """Show the capture window for framing.""" + self.capture(show=True) + + def capture(self, show=False): + """ + Capture an image from the Maya viewport. + + :type show: bool + """ + if not self._force and os.path.exists(self.path()): + self.showWarningDialog() + + mutils.gui.thumbnailCapture( + show=show, + path=self.path(), + captured=self.captured.emit + ) + + def showLoadImageDialog(self): + """Show a file dialog for choosing an image from disc.""" + if not self._force and os.path.exists(self.path()): + self.showWarningDialog() + + fileDialog = QtWidgets.QFileDialog( + self, + caption="Open Image", + filter="Image Files (*.png *.jpg *.bmp)" + ) + + fileDialog.fileSelected.connect(self._fileSelected) + fileDialog.exec_() + + def _fileSelected(self, path): + """ + Triggered when the file dialog is accepted. + + :type path: str + """ + shutil.copy(path, self.path()) + self.captured.emit(self.path()) + + +def testThumbnailCaptureMenu(): + """A method for testing the thumbnail capture menu in Maya.""" + + def capturedCallback(path): + """ + Triggered when the captured menu has been accepted. + + :type path: str + """ + print("Captured thumbnail to:", path) + + path = "c:/tmp/test.png" + + menu = ThumbnailCaptureMenu(path, True) + menu.captured.connect(capturedCallback) + menu.exec_(QtGui.QCursor.pos()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/matchnames.py b/2023/scripts/animation_tools/studiolibrary/mutils/matchnames.py new file mode 100644 index 0000000..4eb66ee --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/matchnames.py @@ -0,0 +1,174 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging + +import mutils +from collections import OrderedDict + +__all__ = [ + "matchNames", + "groupObjects", +] + + +logger = logging.getLogger(__name__) + + +def rotateSequence(seq, current): + """ + :type seq: + :type current: + :rtype: + """ + n = len(seq) + for i in range(n): + yield seq[(i + current) % n] + + +def groupObjects(objects): + """ + :type objects: + :rtype: + """ + results = OrderedDict() + for name in objects: + node = mutils.Node(name) + results.setdefault(node.namespace(), []) + results[node.namespace()].append(name) + results = OrderedDict(sorted(results.items(), key=lambda t: (t[0].count(":"), len(t[0])))) + return results + + +def indexObjects(objects): + """ + :type objects: list[str] + :rtype: dict + """ + result = {} + if objects: + for name in objects: + node = mutils.Node(name) + result.setdefault(node.shortname(), []) + result[node.shortname()].append(node) + return result + + +def matchInIndex(node, index): + """ + :type node: mutils.Node + :type index: dict[list[mutils.Node]] + :rtype: Node + """ + result = None + if node.shortname() in index: + nodes = index[node.shortname()] + if nodes: + for n in nodes: + if node.name().endswith(n.name()) or n.name().endswith(node.name()): + result = n + break + if result is not None: + index[node.shortname()].remove(result) + + return result + + +def matchNames(srcObjects, dstObjects=None, dstNamespaces=None, search=None, replace=None): + """ + :type srcObjects: list[str] + :type dstObjects: list[str] + :type dstNamespaces: list[str] + :rtype: list[(mutils.Node, mutils.Node)] + """ + results = [] + if dstObjects is None: + dstObjects = [] + + srcGroup = groupObjects(srcObjects) + srcNamespaces = srcGroup.keys() + + if not dstObjects and not dstNamespaces: # and not selection: + dstNamespaces = srcNamespaces + + if not dstNamespaces and dstObjects: + dstGroup = groupObjects(dstObjects) + dstNamespaces = dstGroup.keys() + + dstIndex = indexObjects(dstObjects) + # DESTINATION NAMESPACES NOT IN SOURCE OBJECTS + dstNamespaces2 = [x for x in dstNamespaces if x not in srcNamespaces] + + # DESTINATION NAMESPACES IN SOURCE OBJECTS + dstNamespaces1 = [x for x in dstNamespaces if x not in dstNamespaces2] + + # CACHE DESTINATION OBJECTS WITH NAMESPACES IN SOURCE OBJECTS + usedNamespaces = [] + notUsedNamespaces = [] + + # FIRST LOOP THROUGH ALL DESTINATION NAMESPACES IN SOURCE OBJECTS + for srcNamespace in srcNamespaces: + if srcNamespace in dstNamespaces1: + usedNamespaces.append(srcNamespace) + for name in srcGroup[srcNamespace]: + + srcNode = mutils.Node(name) + + if search is not None and replace is not None: + # Using the mirror table which supports * style replacing + name = mutils.MirrorTable.replace(name, search, replace) + + dstNode = mutils.Node(name) + + if dstObjects: + dstNode = matchInIndex(dstNode, dstIndex) + if dstNode: + results.append((srcNode, dstNode)) + yield (srcNode, dstNode) + else: + logger.debug("Cannot find matching destination object for %s" % srcNode.name()) + else: + notUsedNamespaces.append(srcNamespace) + + # SECOND LOOP THROUGH ALL OTHER DESTINATION NAMESPACES + srcNamespaces = notUsedNamespaces + srcNamespaces.extend(usedNamespaces) + _index = 0 + for dstNamespace in dstNamespaces2: + match = False + i = _index + for srcNamespace in rotateSequence(srcNamespaces, _index): + if match: + _index = i + break + i += 1 + for name in srcGroup[srcNamespace]: + srcNode = mutils.Node(name) + dstNode = mutils.Node(name) + dstNode.setNamespace(dstNamespace) + + if dstObjects: + dstNode = matchInIndex(dstNode, dstIndex) + elif dstNamespaces: + pass + + if dstNode: + match = True + results.append((srcNode, dstNode)) + yield (srcNode, dstNode) + else: + logger.debug("Cannot find matching destination object for %s" % srcNode.name()) + + if logger.parent.level == logging.DEBUG or logger.level == logging.DEBUG: + for dstNodes in dstIndex.values(): + for dstNode in dstNodes: + logger.debug("Cannot find matching source object for %s" % dstNode.name()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/mirrortable.py b/2023/scripts/animation_tools/studiolibrary/mutils/mirrortable.py new file mode 100644 index 0000000..c4daedc --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/mirrortable.py @@ -0,0 +1,918 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +# mirrortable.py + +import mutils + +# Example 1: +# Create a MirrorTable instance from the given objects +mt = mutils.MirrorTable.fromObjects(objects, "_l_", "_r_", MirrorPlane.YZ) + +# Example 2: +# Create a MirrorTable instance from the selected objects +objects = maya.cmds.ls(selection=True) +mt = mutils.MirrorTable.fromObjects(objects, "_l_", "_r_", MirrorPlane.YZ) + +# Example 3: +# Save the MirrorTable to the given JSON path +path = "/tmp/mirrortable.json" +mt.save(path) + +# Example 4: +# Create a MirrorTable instance from the given JSON path +path = "/tmp/mirrortable.json" +mt = mutils.MirrorTable.fromPath(path) + +# Example 5: +# Mirror all the objects from file +mt.load() + +# Example 6: +# Mirror only the selected objects +objects = maya.cmds.ls(selection=True) or [] +mt.load(objects=objects) + +# Example 7: +# Mirror all objects from file to the given namespaces +mt.load(namespaces=["character1", "character2"]) + +# Example 8: +# Mirror only the given objects +mt.load(objects=["character1:Hand_L", "character1:Finger_L"]) + +# Example 9: +# Mirror all objects from left to right +mt.load(option=mutils.MirrorOption.LeftToRight) + +# Example 10: +# Mirror all objects from right to left +mt.load(option=mutils.MirrorOption.RightToLeft) + +# Example 11: +# Mirror only the current pose +mt.load(animation=False) +""" + +import re +import mutils +import logging +import traceback + +from studiovendor import six + +try: + import maya.cmds +except ImportError: + traceback.print_exc() + + +__all__ = [ + "MirrorTable", + "MirrorPlane", + "MirrorOption", + "saveMirrorTable", +] + + +logger = logging.getLogger(__name__) + + +RE_LEFT_SIDE = "Left|left|Lf|lt_|_lt|lf_|_lf|_l_|_L|L_|:l_|^l_|_l$|:L|^L" +RE_RIGHT_SIDE = "Right|right|Rt|rt_|_rt|_r_|_R|R_|:r_|^r_|_r$|:R|^R" + +VALID_NODE_TYPES = ["joint", "transform"] + + +class MirrorPlane: + YZ = [-1, 1, 1] + XZ = [1, -1, 1] + XY = [1, 1, -1] + + +class MirrorOption: + Swap = 0 + LeftToRight = 1 + RightToLeft = 2 + + +class KeysOption: + All = "All Keys" + SelectedRange = "Selected Range" + + +def saveMirrorTable(path, objects, metadata=None, *args, **kwargs): + """ + Convenience function for saving a mirror table to the given disc location. + + :type path: str + :type objects: list[str] + :type metadata: dict or None + :type args: list + :type kwargs: dict + :rtype: MirrorTable + """ + mirrorTable = MirrorTable.fromObjects(objects, *args, **kwargs) + + if metadata: + mirrorTable.updateMetadata(metadata) + + mirrorTable.save(path) + + return mirrorTable + + +class MirrorTable(mutils.TransferObject): + + @classmethod + @mutils.timing + @mutils.unifyUndo + @mutils.showWaitCursor + @mutils.restoreSelection + def fromObjects( + cls, + objects, + leftSide=None, + rightSide=None, + mirrorPlane=None + ): + """ + Create a new Mirror Table instance from the given Maya object/controls. + + :type objects: list[str] + :type leftSide: str + :type rightSide: str + :type mirrorPlane: mirrortable.MirrorPlane or str + + :rtype: MirrorTable + """ + mirrorPlane = mirrorPlane or MirrorPlane.YZ + + if isinstance(mirrorPlane, six.string_types): + + if mirrorPlane.lower() == "yz": + mirrorPlane = MirrorPlane.YZ + + elif mirrorPlane.lower() == "xz": + mirrorPlane = MirrorPlane.XZ + + elif mirrorPlane.lower() == "xy": + mirrorPlane = MirrorPlane.XY + + mirrorTable = cls() + mirrorTable.setMetadata("left", leftSide) + mirrorTable.setMetadata("right", rightSide) + mirrorTable.setMetadata("mirrorPlane", mirrorPlane) + + for obj in objects: + nodeType = maya.cmds.nodeType(obj) + if nodeType in VALID_NODE_TYPES: + mirrorTable.add(obj) + else: + msg = "Node of type {0} is not supported. Node name: {1}" + msg = msg.format(nodeType, obj) + logger.info(msg) + + return mirrorTable + + @staticmethod + def findLeftSide(objects): + """ + Return the left side naming convention for the given objects + + :type objects: list[str] + :rtype: str + """ + return MirrorTable.findSide(objects, RE_LEFT_SIDE) + + @staticmethod + def findRightSide(objects): + """ + Return the right side naming convention for the given objects + + :type objects: list[str] + :rtype: str + """ + return MirrorTable.findSide(objects, RE_RIGHT_SIDE) + + @classmethod + def findSide(cls, objects, reSides): + """ + Return the naming convention for the given object names. + + :type objects: list[str] + :type reSides: str or list[str] + :rtype: str + """ + if isinstance(reSides, six.string_types): + reSides = reSides.split("|") + + # Compile the list of regular expressions into a re.object + reSides = [re.compile(side) for side in reSides] + + for obj in objects: + obj = obj.split("|")[-1] + obj = obj.split(":")[-1] + + for reSide in reSides: + + m = reSide.search(obj) + if m: + side = m.group() + + if obj.startswith(side): + side += "*" + + if obj.endswith(side): + side = "*" + side + + return side + + return "" + + @staticmethod + def matchSide(name, side): + """ + Return True if the name contains the given side. + + :type name: str + :type side: str + :rtype: bool + """ + if side: + return MirrorTable.rreplace(name, side, "X") != name + + return False + + @staticmethod + def rreplace(name, old, new): + """ + convenience method. + + Example: + print MirrorTable.rreplace("CHR1:RIG:RhandCON", ":R", ":L") + "CHR1:RIG:LhandCON" + + :type name: str + :type old: str + :type new: str + :rtype: str + """ + names = [] + + for n in name.split("|"): + + namespaces = '' + if ':' in n: + namespaces, n = n.rsplit(':', 1) + + other = mutils.mirrortable.MirrorTable.replace(n, old, new) + + if namespaces: + other = ':'.join([namespaces, other]) + + names.append(other) + + return "|".join(names) + + @staticmethod + def replace(name, old, new): + """ + A static method that is called by self.mirrorObject. + + :type name: str + :type old: str + :type new: str + :rtype: str + """ + # Support for replacing a prefix naming convention. + if old.endswith("*") or new.endswith("*"): + name = MirrorTable.replacePrefix(name, old, new) + + # Support for replacing a suffix naming convention. + elif old.startswith("*") or new.startswith("*"): + name = MirrorTable.replaceSuffix(name, old, new) + + # Support for all other naming conventions. + else: + name = name.replace(old, new) + + return name + + @staticmethod + def replacePrefix(name, old, new): + """ + Replace the given old prefix with the given new prefix. + It should also support long names. + + # Example: + self.replacePrefix("R_footRoll", "R", "L") + # Result: "L_footRoll" and not "L_footLoll". + + self.replacePrefix("Grp|Ch1:R_footExtra|Ch1:R_footRoll", "R_", "L_") + # Result: "Grp|Ch1:L_footExtra|Ch1:L_footRoll" + + :type name: str + :type old: str + :type new: str + :rtype: str + """ + old = old.replace("*", "") + new = new.replace("*", "") + + if name.startswith(old): + name = name.replace(old, new, 1) + + return name + + @staticmethod + def replaceSuffix(name, old, new): + """ + Replace the given old suffix with the given new suffix. + It should also support long names. + + # Example: + self.replaceSuffix("footRoll_R", "R", "L") + # Result: "footRoll_L" and not "footLoll_L". + + self.replaceSuffix("Grp|Ch1:footExtra_R|Ch1:footRoll_R", "_R", "_L") + # Result: "Grp|Ch1:footExtra_L|Ch1:footRoll_L" + + :type name: str + :type old: str + :type new: str + :rtype: str + """ + old = old.replace("*", "") + new = new.replace("*", "") + + if name.endswith(old): + name = name[:-len(old)] + new + + return name + + def mirrorObject(self, obj): + """ + Return the other/opposite side for the given name. + + Example: + print self.mirrorObject("FKSholder_L") + # FKShoulder_R + + :type obj: str + :rtype: str or None + """ + leftSide = self.leftSide() + rightSide = self.rightSide() + return self._mirrorObject(obj, leftSide, rightSide) + + @staticmethod + def _mirrorObject(obj, leftSide, rightSide): + """ + A static method that is called by self.mirrorObject. + + :type obj: str + :rtype: str or None + """ + dstName = MirrorTable.rreplace(obj, leftSide, rightSide) + + if obj == dstName: + dstName = MirrorTable.rreplace(obj, rightSide, leftSide) + + if dstName != obj: + return dstName + + # Return None as the given name is probably a center control + # and doesn't have an opposite side. + return None + + @staticmethod + def animCurve(obj, attr): + """ + :type obj: str + :type attr: str + :rtype: str + """ + fullname = obj + "." + attr + connections = maya.cmds.listConnections(fullname, d=False, s=True) + if connections: + return connections[0] + return None + + @staticmethod + def scaleKey(obj, attr, time=None): + """ + :type obj: str + :type attr: str + """ + curve = MirrorTable.animCurve(obj, attr) + if curve: + maya.cmds.selectKey(curve) + if time: + maya.cmds.scaleKey(time=time, iub=False, ts=1, fs=1, vs=-1, vp=0, animation="keys") + else: + maya.cmds.scaleKey(iub=False, ts=1, fs=1, vs=-1, vp=0, animation="keys") + @staticmethod + def formatValue(attr, value, mirrorAxis): + """ + :type attr: str + :type value: float + :type mirrorAxis: list[int] + :rtype: float + """ + if MirrorTable.isAttrMirrored(attr, mirrorAxis): + return value * -1 + return value + + @staticmethod + def maxIndex(numbers): + """ + Finds the largest number in a list + :type numbers: list[float] or list[str] + :rtype: int + """ + m = 0 + result = 0 + for i in numbers: + v = abs(float(i)) + if v > m: + m = v + result = numbers.index(i) + return result + + @staticmethod + def axisWorldPosition(obj, axis): + """ + :type obj: str + :type axis: list[int] + :rtype: list[float] + """ + transform1 = maya.cmds.createNode("transform", name="transform1") + try: + transform1, = maya.cmds.parent(transform1, obj, r=True) + maya.cmds.setAttr(transform1 + ".t", *axis) + maya.cmds.setAttr(transform1 + ".r", 0, 0, 0) + maya.cmds.setAttr(transform1 + ".s", 1, 1, 1) + return maya.cmds.xform(transform1, q=True, ws=True, piv=True) + finally: + maya.cmds.delete(transform1) + + @staticmethod + def isAttrMirrored(attr, mirrorAxis): + """ + :type attr: str + :type mirrorAxis: list[int] + :rtype: float + """ + if mirrorAxis == [-1, 1, 1]: + if attr == "translateX" or attr == "rotateY" or attr == "rotateZ": + return True + + elif mirrorAxis == [1, -1, 1]: + if attr == "translateY" or attr == "rotateX" or attr == "rotateZ": + return True + + elif mirrorAxis == [1, 1, -1]: + if attr == "translateZ" or attr == "rotateX" or attr == "rotateY": + return True + + elif mirrorAxis == [-1, -1, -1]: + if attr == "translateX" or attr == "translateY" or attr == "translateZ": + return True + return False + + @staticmethod + def isAxisMirrored(srcObj, dstObj, axis, mirrorPlane): + """ + :type srcObj: str + :type dstObj: str + :type axis: list[int] + :type mirrorPlane: list[int] + :rtype: int + """ + old1 = maya.cmds.xform(srcObj, q=True, ws=True, piv=True) + old2 = maya.cmds.xform(dstObj, q=True, ws=True, piv=True) + + new1 = MirrorTable.axisWorldPosition(srcObj, axis) + new2 = MirrorTable.axisWorldPosition(dstObj, axis) + + mp = mirrorPlane + v1 = mp[0]*(new1[0]-old1[0]), mp[1]*(new1[1]-old1[1]), mp[2]*(new1[2]-old1[2]) + v2 = new2[0]-old2[0], new2[1]-old2[1], new2[2]-old2[2] + + d = sum(p*q for p, q in zip(v1, v2)) + + if d >= 0.0: + return False + return True + + @staticmethod + def _calculateMirrorAxis(obj, mirrorPlane): + """ + :type obj: str + :rtype: list[int] + """ + result = [1, 1, 1] + transform0 = maya.cmds.createNode("transform", name="transform0") + + try: + transform0, = maya.cmds.parent(transform0, obj, r=True) + transform0, = maya.cmds.parent(transform0, w=True) + maya.cmds.setAttr(transform0 + ".t", 0, 0, 0) + + t1 = MirrorTable.axisWorldPosition(transform0, [1, 0, 0]) + t2 = MirrorTable.axisWorldPosition(transform0, [0, 1, 0]) + t3 = MirrorTable.axisWorldPosition(transform0, [0, 0, 1]) + + t1 = "%.3f" % t1[0], "%.3f" % t1[1], "%.3f" % t1[2] + t2 = "%.3f" % t2[0], "%.3f" % t2[1], "%.3f" % t2[2] + t3 = "%.3f" % t3[0], "%.3f" % t3[1], "%.3f" % t3[2] + + if mirrorPlane == MirrorPlane.YZ: # [-1, 1, 1]: + x = [t1[0], t2[0], t3[0]] + i = MirrorTable.maxIndex(x) + result[i] = -1 + + if mirrorPlane == MirrorPlane.XZ: # [1, -1, 1]: + y = [t1[1], t2[1], t3[1]] + i = MirrorTable.maxIndex(y) + result[i] = -1 + + if mirrorPlane == MirrorPlane.XY: # [1, 1, -1]: + z = [t1[2], t2[2], t3[2]] + i = MirrorTable.maxIndex(z) + result[i] = -1 + + finally: + maya.cmds.delete(transform0) + + return result + + def select(self, objects=None, namespaces=None, **kwargs): + """ + Select the objects contained in file. + + :type objects: list[str] or None + :type namespaces: list[str] or None + :rtype: None + """ + selectionSet = mutils.SelectionSet.fromPath(self.path()) + selectionSet.load(objects=objects, namespaces=namespaces, **kwargs) + + def leftSide(self): + """ + :rtype: str | None + """ + return self.metadata().get("left") + + def rightSide(self): + """ + :rtype: str | None + """ + return self.metadata().get("right") + + def mirrorPlane(self): + """ + :rtype: lsit[int] | None + """ + return self.metadata().get("mirrorPlane") + + def mirrorAxis(self, name): + """ + :rtype: list[int] + """ + return self.objects()[name]["mirrorAxis"] + + def leftCount(self, objects=None): + """ + :type objects: list[str] + :rtype: int + """ + if objects is None: + objects = self.objects() + return len([obj for obj in objects if self.isLeftSide(obj)]) + + def rightCount(self, objects=None): + """ + :type objects: list[str] + :rtype: int + """ + if objects is None: + objects = self.objects() + return len([obj for obj in objects if self.isRightSide(obj)]) + + def createObjectData(self, name): + """ + :type name: + :rtype: + """ + result = {"mirrorAxis": self.calculateMirrorAxis(name)} + return result + + def matchObjects( + self, + objects=None, + namespaces=None, + ): + """ + :type objects: list[str] + :type namespaces: list[str] + :rtype: list[str] + """ + srcObjects = self.objects().keys() + + matches = mutils.matchNames( + srcObjects=srcObjects, + dstObjects=objects, + dstNamespaces=namespaces, + ) + + for srcNode, dstNode in matches: + dstName = dstNode.name() + mirrorAxis = self.mirrorAxis(srcNode.name()) + yield srcNode.name(), dstName, mirrorAxis + + def rightToLeft(self): + """""" + self.load(option=MirrorOption.RightToLeft) + + def leftToRight(self): + """""" + self.load(option=MirrorOption.LeftToRight) + + @mutils.timing + @mutils.unifyUndo + @mutils.showWaitCursor + @mutils.restoreSelection + def load( + self, + objects=None, + namespaces=None, + option=None, + keysOption=None, + time=None, + ): + """ + Load the mirror table for the given objects. + + :type objects: list[str] + :type namespaces: list[str] + :type option: mirrorOptions + :type keysOption: None or KeysOption.SelectedRange + :type time: None or list[int] + """ + if option and not isinstance(option, int): + if option.lower() == "swap": + option = 0 + elif option.lower() == "left to right": + option = 1 + elif option.lower() == "right to left": + option = 2 + else: + raise ValueError('Invalid load option=' + str(option)) + + self.validate(namespaces=namespaces) + + results = {} + animation = True + foundObject = False + srcObjects = self.objects().keys() + + if option is None: + option = MirrorOption.Swap + + if keysOption == KeysOption.All: + time = None + elif keysOption == KeysOption.SelectedRange: + time = mutils.selectedFrameRange() + + # Check to make sure that the given time is not a single frame + if time and time[0] == time[1]: + time = None + animation = False + + matches = mutils.matchNames( + srcObjects=srcObjects, + dstObjects=objects, + dstNamespaces=namespaces, + ) + + for srcNode, dstNode in matches: + dstObj = dstNode.name() + dstObj2 = self.mirrorObject(dstObj) or dstObj + + if dstObj2 not in results: + results[dstObj] = dstObj2 + + mirrorAxis = self.mirrorAxis(srcNode.name()) + dstObjExists = maya.cmds.objExists(dstObj) + dstObj2Exists = maya.cmds.objExists(dstObj2) + + if dstObjExists and dstObj2Exists: + foundObject = True + if animation: + self.transferAnimation(dstObj, dstObj2, mirrorAxis=mirrorAxis, option=option, time=time) + else: + self.transferStatic(dstObj, dstObj2, mirrorAxis=mirrorAxis, option=option) + else: + if not dstObjExists: + msg = "Cannot find destination object {0}" + msg = msg.format(dstObj) + logger.debug(msg) + + if not dstObj2Exists: + msg = "Cannot find mirrored destination object {0}" + msg = msg.format(dstObj2) + logger.debug(msg) + + # Return the focus to the Maya window + maya.cmds.setFocus("MayaWindow") + + if not foundObject: + + text = "No objects match when loading data. " \ + "Turn on debug mode to see more details." + + raise mutils.NoMatchFoundError(text) + + def transferStatic(self, srcObj, dstObj, mirrorAxis=None, attrs=None, option=MirrorOption.Swap): + """ + :type srcObj: str + :type dstObj: str + :type mirrorAxis: list[int] + :type attrs: None | list[str] + :type option: MirrorOption + """ + srcValue = None + dstValue = None + srcValid = self.isValidMirror(srcObj, option) + dstValid = self.isValidMirror(dstObj, option) + + if attrs is None: + attrs = maya.cmds.listAttr(srcObj, keyable=True) or [] + + for attr in attrs: + dstAttr = dstObj + "." + attr + srcAttr = srcObj + "." + attr + if maya.cmds.objExists(dstAttr): + if dstValid: + srcValue = maya.cmds.getAttr(srcAttr) + + if srcValid: + dstValue = maya.cmds.getAttr(dstAttr) + + if dstValid: + self.setAttr(dstObj, attr, srcValue, mirrorAxis=mirrorAxis) + + if srcValid: + self.setAttr(srcObj, attr, dstValue, mirrorAxis=mirrorAxis) + else: + logger.debug("Cannot find destination attribute %s" % dstAttr) + + def setAttr(self, name, attr, value, mirrorAxis=None): + """ + :type name: str + :type: attr: str + :type: value: int | float + :type mirrorAxis: Axis or None + """ + if mirrorAxis is not None: + value = self.formatValue(attr, value, mirrorAxis) + try: + maya.cmds.setAttr(name + "." + attr, value) + except RuntimeError: + msg = "Cannot mirror static attribute {name}.{attr}" + msg = msg.format(name=name, attr=attr) + logger.debug(msg) + + def transferAnimation(self, srcObj, dstObj, mirrorAxis=None, option=MirrorOption.Swap, time=None): + """ + :type srcObj: str + :type dstObj: str + :type mirrorAxis: Axis or None + """ + srcValid = self.isValidMirror(srcObj, option) + dstValid = self.isValidMirror(dstObj, option) + + tmpObj, = maya.cmds.duplicate(srcObj, name='DELETE_ME', parentOnly=True) + try: + if dstValid: + self._transferAnimation(srcObj, tmpObj, time=time) + if srcValid: + self._transferAnimation(dstObj, srcObj, mirrorAxis=mirrorAxis, time=time) + if dstValid: + self._transferAnimation(tmpObj, dstObj, mirrorAxis=mirrorAxis, time=time) + finally: + maya.cmds.delete(tmpObj) + + def _transferAnimation(self, srcObj, dstObj, attrs=None, mirrorAxis=None, time=None): + """ + :type srcObj: str + :type dstObj: str + :type attrs: list[str] + :type time: list[int] + :type mirrorAxis: list[int] + """ + maya.cmds.cutKey(dstObj, time=time or ()) # remove keys + if maya.cmds.copyKey(srcObj, time=time or ()): + if not time: + maya.cmds.pasteKey(dstObj, option="replaceCompletely") + else: + maya.cmds.pasteKey(dstObj, time=time, option="replace") + + if attrs is None: + attrs = maya.cmds.listAttr(srcObj, keyable=True) or [] + + for attr in attrs: + srcAttribute = mutils.Attribute(srcObj, attr) + dstAttribute = mutils.Attribute(dstObj, attr) + + if dstAttribute.exists(): + if dstAttribute.isConnected(): + if self.isAttrMirrored(attr, mirrorAxis): + maya.cmds.scaleKey(dstAttribute.name(), valueScale=-1, attribute=attr) + else: + value = srcAttribute.value() + self.setAttr(dstObj, attr, value, mirrorAxis) + + def isValidMirror(self, obj, option): + """ + :type obj: str + :type option: MirrorOption + :rtype: bool + """ + if option == MirrorOption.Swap: + return True + + elif option == MirrorOption.LeftToRight and self.isLeftSide(obj): + return False + + elif option == MirrorOption.RightToLeft and self.isRightSide(obj): + return False + + else: + return True + + def isLeftSide(self, name): + """ + Return True if the object contains the left side string. + + # Group|Character1:footRollExtra_L|Character1:footRoll_L + # Group|footRollExtra_L|footRoll_LShape + # footRoll_L + # footRoll_LShape + + :type name: str + :rtype: bool + """ + side = self.leftSide() + return self.matchSide(name, side) + + def isRightSide(self, name): + """ + Return True if the object contains the right side string. + + # Group|Character1:footRollExtra_R|Character1:footRoll_R + # Group|footRollExtra_R|footRoll_RShape + # footRoll_R + # footRoll_RShape + + :type name: str + :rtype: bool + """ + side = self.rightSide() + return self.matchSide(name, side) + + def calculateMirrorAxis(self, srcObj): + """ + :type srcObj: str + :rtype: list[int] + """ + result = [1, 1, 1] + dstObj = self.mirrorObject(srcObj) or srcObj + mirrorPlane = self.mirrorPlane() + + if dstObj == srcObj or not maya.cmds.objExists(dstObj): + # The source object does not have an opposite side + result = MirrorTable._calculateMirrorAxis(srcObj, mirrorPlane) + else: + # The source object does have an opposite side + if MirrorTable.isAxisMirrored(srcObj, dstObj, [1, 0, 0], mirrorPlane): + result[0] = -1 + + if MirrorTable.isAxisMirrored(srcObj, dstObj, [0, 1, 0], mirrorPlane): + result[1] = -1 + + if MirrorTable.isAxisMirrored(srcObj, dstObj, [0, 0, 1], mirrorPlane): + result[2] = -1 + + return result diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/namespace.py b/2023/scripts/animation_tools/studiolibrary/mutils/namespace.py new file mode 100644 index 0000000..1311a7e --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/namespace.py @@ -0,0 +1,88 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +import logging +import traceback +from collections import OrderedDict + +try: + import maya.cmds +except ImportError: + traceback.print_exc() + + +logger = logging.getLogger(__name__) + + +__all__ = [ + "getAll", + "getFromDagPath", + "getFromDagPaths", + "getFromSelection", +] + + +def getFromDagPaths(dagPaths): + """ + :type dagPaths: list[str] + :rtype: list[str] + """ + namespaces = [] + + for dagPath in dagPaths: + namespace = getFromDagPath(dagPath) + namespaces.append(namespace) + + # Remove any duplicates while retaining the order + return list(OrderedDict.fromkeys(namespaces)) + + +def getFromDagPath(dagPath): + """ + :type dagPath: str + :rtype: str + """ + shortName = dagPath.split("|")[-1] + namespace = ":".join(shortName.split(":")[:-1]) + return namespace + + +def getFromSelection(): + """ + Get the current namespaces from the selected objects in Maya. + + :rtype: list[str] + """ + namespaces = [""] + + try: + names = maya.cmds.ls(selection=True) + namespaces = getFromDagPaths(names) or namespaces + except NameError as error: + # Catch any errors when running this command outside of Maya + logger.exception(error) + + return namespaces + + +def getAll(): + """ + Get all the available namespaces in the scene + + :rtype: list[str] + """ + IGNORE_NAMESPACES = ['UI', 'shared'] + + namespaces = maya.cmds.namespaceInfo(listOnlyNamespaces=True, recurse=True) + namespaces = list(set(namespaces) - set(IGNORE_NAMESPACES)) + namespaces = sorted(namespaces) + + return namespaces diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/node.py b/2023/scripts/animation_tools/studiolibrary/mutils/node.py new file mode 100644 index 0000000..00854c6 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/node.py @@ -0,0 +1,178 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import mutils + +from studiovendor import six + +try: + import maya.cmds +except Exception: + import traceback + traceback.print_exc() + + +class Node(object): + + @classmethod + def ls(cls, objects=None, selection=False): + """ + nodes = Node.ls(selection=True) + :rtype: list[Node] + """ + + if objects is None and not selection: + objects = maya.cmds.ls() + else: + objects = objects or [] + if selection: + objects.extend(maya.cmds.ls(selection=True) or []) + + return [cls(name) for name in objects] + + def __init__(self, name, attributes=None): + """ + :type attributes: [Attribute] + :type name: str + """ + try: + self._name = six.text_type(name) # .encode('ascii') + except UnicodeEncodeError: + raise UnicodeEncodeError('Not a valid ascii name "%s".' % name) + + # Cached properties + self._shortname = None + self._namespace = None + self._mirrorAxis = None + self._attributes = attributes + + def __str__(self): + return self.name() + + def name(self): + """ + :rtype: str + """ + return self._name + + def attributes(self): + """ + :rtype: str + """ + return self._attributes + + def shortname(self): + """ + :rtype: str + """ + if self._shortname is None: + self._shortname = self.name().split("|")[-1] + return self._shortname + + def toShortName(self): + """ + :rtype: None or str + """ + # Try to reduce any long names to short names when using namespaces + names = maya.cmds.ls(self.shortname()) + if len(names) == 1: + return Node(names[0]) + elif len(names) > 1: + # Return the original name if the short name is not unique + return Node(self.name()) + else: + raise mutils.NoObjectFoundError("No object found %s" % str(self.shortname())) + + def namespace(self): + """ + :rtype: str + """ + if self._namespace is None: + self._namespace = ":".join(self.shortname().split(":")[:-1]) + return self._namespace + + def stripFirstPipe(self): + """ + n = Node("|pSphere") + n.stripFirstPipe() + print(n.name()) + # Result: pSphere + """ + if self.name().startswith("|"): + self._name = self.name()[1:] + + def exists(self): + """ + :rtype: bool + """ + return maya.cmds.objExists(self.name()) + + def isLong(self): + """ + :rtype: bool + """ + return "|" in self.name() + + def isReferenced(self): + """ + :rtype: bool + """ + return maya.cmds.referenceQuery(self.name(), isNodeReferenced=True) + + def setMirrorAxis(self, mirrorAxis): + """ + :type mirrorAxis: list[int] + """ + self._mirrorAxis = mirrorAxis + + def setNamespace(self, namespace): + """ + Sets the namespace for a current node in Maya. + + node.setNamespace("character", "|group|control") + result: |character:group|character:control + + setNamespace("", "|character:group|character:control") + result: |group|control + + :type namespace: str + """ + newName = self.name() + oldName = self.name() + + newNamespace = namespace + oldNamespace = self.namespace() + + # Ignore any further processing if the namespace is the same. + if newNamespace == oldNamespace: + return self.name() + + # Replace the current namespace with the specified one + if oldNamespace and newNamespace: + newName = oldName.replace(oldNamespace + ":", newNamespace + ":") + + # Remove existing namespace + elif oldNamespace and not newNamespace: + newName = oldName.replace(oldNamespace + ":", "") + + # Set namespace if the current namespace doesn't exists + elif not oldNamespace and newNamespace: + newName = oldName.replace("|", "|" + newNamespace + ":") + if newNamespace and not newName.startswith("|"): + newName = newNamespace + ":" + newName + + self._name = newName + + self._shortname = None + self._namespace = None + + return self.name() diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/playblast.py b/2023/scripts/animation_tools/studiolibrary/mutils/playblast.py new file mode 100644 index 0000000..bd6065d --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/playblast.py @@ -0,0 +1,107 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import logging + +import mutils + +try: + import maya.cmds +except Exception: + import traceback + traceback.print_exc() + + +__all__ = [ + "playblast", +] + +logger = logging.getLogger(__name__) + + +# Valid Renderers: +# [u'vp2Renderer', u'base_OpenGL_Renderer', +# u'hwRender_OpenGL_Renderer', u'stub_Renderer'] +DEFAULT_PLAYBLAST_RENDERER = None + + +class PlayblastError(Exception): + """Base class for exceptions in this module.""" + pass + + +def playblast(filename, modelPanel, startFrame, endFrame, width, height, step=1): + """ + Wrapper for Maya's Playblast command. + + :type filename: str + :type modelPanel: str + :type startFrame: int + :type endFrame: int + :type width: int + :type height: int + :type step: list[int] + :rtype: str + """ + logger.info(u"Playblasting '{filename}'".format(filename=filename)) + + if startFrame == endFrame and os.path.exists(filename): + os.remove(filename) + + frame = [i for i in range(startFrame, endFrame + 1, step)] + + modelPanel = modelPanel or mutils.currentModelPanel() + if maya.cmds.modelPanel(modelPanel, query=True, exists=True): + maya.cmds.setFocus(modelPanel) + if DEFAULT_PLAYBLAST_RENDERER: + maya.cmds.modelEditor( + modelPanel, + edit=True, + rendererName=DEFAULT_PLAYBLAST_RENDERER + ) + + name, compression = os.path.splitext(filename) + filename = filename.replace(compression, "") + compression = compression.replace(".", "") + offScreen = mutils.isLinux() + + path = maya.cmds.playblast( + format="image", + viewer=False, + percent=100, + quality=100, + frame=frame, + width=width, + height=height, + filename=filename, + endTime=endFrame, + startTime=startFrame, + offScreen=offScreen, + forceOverwrite=True, + showOrnaments=False, + compression=compression, + ) + + if not path: + raise PlayblastError("Playblast was canceled") + + src = path.replace("####", str(int(0)).rjust(4, "0")) + + if startFrame == endFrame: + dst = src.replace(".0000.", ".") + logger.info("Renaming '%s' => '%s" % (src, dst)) + os.rename(src, dst) + src = dst + + logger.info(u"Playblasted '%s'" % src) + return src diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/pose.py b/2023/scripts/animation_tools/studiolibrary/mutils/pose.py new file mode 100644 index 0000000..aea6601 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/pose.py @@ -0,0 +1,591 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +# +# pose.py +import mutils + +# Example 1: +# Save and load a pose from the selected objects +objects = maya.cmds.ls(selection=True) +mutils.savePose("/tmp/pose.json", objects) + +mutils.loadPose("/tmp/pose.json") + +# Example 2: +# Create a pose object from a list of object names +pose = mutils.Pose.fromObjects(objects) + +# Example 3: +# Create a pose object from the selected objects +objects = maya.cmds.ls(selection=True) +pose = mutils.Pose.fromObjects(objects) + +# Example 4: +# Save the pose object to disc +path = "/tmp/pose.json" +pose.save(path) + +# Example 5: +# Create a pose object from disc +path = "/tmp/pose.json" +pose = mutils.Pose.fromPath(path) + +# Load the pose on to the objects from file +pose.load() + +# Load the pose to the selected objects +objects = maya.cmds.ls(selection=True) +pose.load(objects=objects) + +# Load the pose to the specified namespaces +pose.load(namespaces=["character1", "character2"]) + +# Load the pose to the specified objects +pose.load(objects=["Character1:Hand_L", "Character1:Finger_L"]) + +""" +import logging + +import mutils + +try: + import maya.cmds +except ImportError: + import traceback + traceback.print_exc() + + +__all__ = ["Pose", "savePose", "loadPose"] + +logger = logging.getLogger(__name__) + +_pose_ = None + + +def savePose(path, objects, metadata=None): + """ + Convenience function for saving a pose to disc for the given objects. + + Example: + path = "C:/example.pose" + pose = savePose(path, metadata={'description': 'Example pose'}) + print(pose.metadata()) + # { + 'user': 'Hovel', + 'mayaVersion': '2016', + 'description': 'Example pose' + } + + :type path: str + :type objects: list[str] + :type metadata: dict or None + :rtype: Pose + """ + pose = mutils.Pose.fromObjects(objects) + + if metadata: + pose.updateMetadata(metadata) + + pose.save(path) + + return pose + + +def loadPose(path, *args, **kwargs): + """ + Convenience function for loading the given pose path. + + :type path: str + :type args: list + :type kwargs: dict + :rtype: Pose + """ + global _pose_ + + clearCache = kwargs.get("clearCache") + + if not _pose_ or _pose_.path() != path or clearCache: + _pose_ = Pose.fromPath(path) + + _pose_.load(*args, **kwargs) + + return _pose_ + + +class Pose(mutils.TransferObject): + + def __init__(self): + mutils.TransferObject.__init__(self) + + self._cache = None + self._mtime = None + self._cacheKey = None + self._isLoading = False + self._selection = None + self._mirrorTable = None + self._autoKeyFrame = None + + def createObjectData(self, name): + """ + Create the object data for the given object name. + + :type name: str + :rtype: dict + """ + attrs = maya.cmds.listAttr(name, unlocked=True, keyable=True) or [] + attrs = list(set(attrs)) + attrs = [mutils.Attribute(name, attr) for attr in attrs] + + data = {"attrs": self.attrs(name)} + + for attr in attrs: + if attr.isValid(): + if attr.value() is None: + msg = "Cannot save the attribute %s with value None." + logger.warning(msg, attr.fullname()) + else: + data["attrs"][attr.attr()] = { + "type": attr.type(), + "value": attr.value() + } + + return data + + def select(self, objects=None, namespaces=None, **kwargs): + """ + Select the objects contained in the pose file. + + :type objects: list[str] or None + :type namespaces: list[str] or None + :rtype: None + """ + selectionSet = mutils.SelectionSet.fromPath(self.path()) + selectionSet.load(objects=objects, namespaces=namespaces, **kwargs) + + def cache(self): + """ + Return the current cached attributes for the pose. + + :rtype: list[(Attribute, Attribute)] + """ + return self._cache + + def attrs(self, name): + """ + Return the attribute for the given name. + + :type name: str + :rtype: dict + """ + return self.object(name).get("attrs", {}) + + def attr(self, name, attr): + """ + Return the attribute data for the given name and attribute. + + :type name: str + :type attr: str + :rtype: dict + """ + return self.attrs(name).get(attr, {}) + + def attrType(self, name, attr): + """ + Return the attribute type for the given name and attribute. + + :type name: str + :type attr: str + :rtype: str + """ + return self.attr(name, attr).get("type", None) + + def attrValue(self, name, attr): + """ + Return the attribute value for the given name and attribute. + + :type name: str + :type attr: str + :rtype: str | int | float + """ + return self.attr(name, attr).get("value", None) + + def setMirrorAxis(self, name, mirrorAxis): + """ + Set the mirror axis for the given name. + + :type name: str + :type mirrorAxis: list[int] + """ + if name in self.objects(): + self.object(name).setdefault("mirrorAxis", mirrorAxis) + else: + msg = "Object does not exist in pose. " \ + "Cannot set mirror axis for %s" + + logger.debug(msg, name) + + def mirrorAxis(self, name): + """ + Return the mirror axis for the given name. + + :rtype: list[int] | None + """ + result = None + if name in self.objects(): + result = self.object(name).get("mirrorAxis", None) + + if result is None: + logger.debug("Cannot find mirror axis in pose for %s", name) + + return result + + def updateMirrorAxis(self, name, mirrorAxis): + """ + Update the mirror axis for the given object name. + + :type name: str + :type mirrorAxis: list[int] + """ + self.setMirrorAxis(name, mirrorAxis) + + def mirrorTable(self): + """ + Return the Mirror Table for the pose. + + :rtype: mutils.MirrorTable + """ + return self._mirrorTable + + def setMirrorTable(self, mirrorTable): + """ + Set the Mirror Table for the pose. + + :type mirrorTable: mutils.MirrorTable + """ + objects = self.objects().keys() + self._mirrorTable = mirrorTable + + for srcName, dstName, mirrorAxis in mirrorTable.matchObjects(objects): + self.updateMirrorAxis(dstName, mirrorAxis) + + def mirrorValue(self, name, attr, mirrorAxis): + """ + Return the mirror value for the given name, attribute and mirror axis. + + :type name: str + :type attr: str + :type mirrorAxis: list[] + :rtype: None | int | float + """ + value = None + + if self.mirrorTable() and name: + + value = self.attrValue(name, attr) + + if value is not None: + value = self.mirrorTable().formatValue(attr, value, mirrorAxis) + else: + logger.debug("Cannot find mirror value for %s.%s", name, attr) + + return value + + def beforeLoad(self, clearSelection=True): + """ + Called before loading the pose. + + :type clearSelection: bool + """ + logger.debug('Before Load "%s"', self.path()) + + if not self._isLoading: + + maya.cmds.refresh(cv=True) + + self._isLoading = True + maya.cmds.undoInfo(openChunk=True) + + self._selection = maya.cmds.ls(selection=True) or [] + self._autoKeyFrame = maya.cmds.autoKeyframe(query=True, state=True) + + maya.cmds.autoKeyframe(edit=True, state=False) + maya.cmds.select(clear=clearSelection) + + def afterLoad(self): + """Called after loading the pose.""" + if not self._isLoading: + return + + logger.debug("After Load '%s'", self.path()) + + self._isLoading = False + if self._selection: + maya.cmds.select(self._selection) + self._selection = None + + maya.cmds.autoKeyframe(edit=True, state=self._autoKeyFrame) + maya.cmds.undoInfo(closeChunk=True) + + logger.debug('Loaded "%s"', self.path()) + + @mutils.timing + def load( + self, + objects=None, + namespaces=None, + attrs=None, + blend=100, + key=False, + mirror=False, + additive=False, + refresh=False, + batchMode=False, + clearCache=False, + mirrorTable=None, + onlyConnected=False, + clearSelection=False, + ignoreConnected=False, + searchAndReplace=None, + ): + """ + Load the pose to the given objects or namespaces. + + :type objects: list[str] + :type namespaces: list[str] + :type attrs: list[str] + :type blend: float + :type key: bool + :type refresh: bool + :type mirror: bool + :type additive: bool + :type mirrorTable: mutils.MirrorTable + :type batchMode: bool + :type clearCache: bool + :type ignoreConnected: bool + :type onlyConnected: bool + :type clearSelection: bool + :type searchAndReplace: (str, str) or None + """ + if mirror and not mirrorTable: + logger.warning("Cannot mirror pose without a mirror table!") + mirror = False + + if batchMode: + key = False + + self.updateCache( + objects=objects, + namespaces=namespaces, + attrs=attrs, + batchMode=batchMode, + clearCache=clearCache, + mirrorTable=mirrorTable, + onlyConnected=onlyConnected, + ignoreConnected=ignoreConnected, + searchAndReplace=searchAndReplace, + ) + + self.beforeLoad(clearSelection=clearSelection) + + try: + self.loadCache(blend=blend, key=key, mirror=mirror, + additive=additive) + finally: + if not batchMode: + self.afterLoad() + + # Return the focus to the Maya window + maya.cmds.setFocus("MayaWindow") + maya.cmds.refresh(cv=True) + + def updateCache( + self, + objects=None, + namespaces=None, + attrs=None, + ignoreConnected=False, + onlyConnected=False, + mirrorTable=None, + batchMode=False, + clearCache=True, + searchAndReplace=None, + ): + """ + Update the pose cache. + + :type objects: list[str] or None + :type namespaces: list[str] or None + :type attrs: list[str] or None + :type ignoreConnected: bool + :type onlyConnected: bool + :type clearCache: bool + :type batchMode: bool + :type mirrorTable: mutils.MirrorTable + :type searchAndReplace: (str, str) or None + """ + if clearCache or not batchMode or not self._mtime: + self._mtime = self.mtime() + + mtime = self._mtime + + cacheKey = \ + str(mtime) + \ + str(objects) + \ + str(attrs) + \ + str(namespaces) + \ + str(ignoreConnected) + \ + str(searchAndReplace) + \ + str(maya.cmds.currentTime(query=True)) + + if self._cacheKey != cacheKey or clearCache: + + self.validate(namespaces=namespaces) + + self._cache = [] + self._cacheKey = cacheKey + + dstObjects = objects + srcObjects = self.objects() + usingNamespaces = not objects and namespaces + + if mirrorTable: + self.setMirrorTable(mirrorTable) + + search = None + replace = None + if searchAndReplace: + search = searchAndReplace[0] + replace = searchAndReplace[1] + + matches = mutils.matchNames( + srcObjects, + dstObjects=dstObjects, + dstNamespaces=namespaces, + search=search, + replace=replace, + ) + + for srcNode, dstNode in matches: + self.cacheNode( + srcNode, + dstNode, + attrs=attrs, + onlyConnected=onlyConnected, + ignoreConnected=ignoreConnected, + usingNamespaces=usingNamespaces, + ) + + if not self.cache(): + text = "No objects match when loading data. " \ + "Turn on debug mode to see more details." + + raise mutils.NoMatchFoundError(text) + + def cacheNode( + self, + srcNode, + dstNode, + attrs=None, + ignoreConnected=None, + onlyConnected=None, + usingNamespaces=None + ): + """ + Cache the given pair of nodes. + + :type srcNode: mutils.Node + :type dstNode: mutils.Node + :type attrs: list[str] or None + :type ignoreConnected: bool or None + :type onlyConnected: bool or None + :type usingNamespaces: none or list[str] + """ + mirrorAxis = None + mirrorObject = None + + # Remove the first pipe in-case the object has a parent + dstNode.stripFirstPipe() + + srcName = srcNode.name() + + if self.mirrorTable(): + mirrorObject = self.mirrorTable().mirrorObject(srcName) + + if not mirrorObject: + mirrorObject = srcName + msg = "Cannot find mirror object in pose for %s" + logger.debug(msg, srcName) + + # Check if a mirror axis exists for the mirrorObject otherwise + # check the srcNode + mirrorAxis = self.mirrorAxis(mirrorObject) or self.mirrorAxis(srcName) + + if mirrorObject and not maya.cmds.objExists(mirrorObject): + msg = "Mirror object does not exist in the scene %s" + logger.debug(msg, mirrorObject) + + if usingNamespaces: + # Try and use the short name. + # Much faster than the long name when setting attributes. + try: + dstNode = dstNode.toShortName() + except mutils.NoObjectFoundError as msg: + logger.debug(msg) + return + except mutils.MoreThanOneObjectFoundError as msg: + logger.debug(msg) + + for attr in self.attrs(srcName): + + if attrs and attr not in attrs: + continue + + dstAttribute = mutils.Attribute(dstNode.name(), attr) + isConnected = dstAttribute.isConnected() + + if (ignoreConnected and isConnected) or (onlyConnected and not isConnected): + continue + + type_ = self.attrType(srcName, attr) + value = self.attrValue(srcName, attr) + srcMirrorValue = self.mirrorValue(mirrorObject, attr, mirrorAxis=mirrorAxis) + + srcAttribute = mutils.Attribute(dstNode.name(), attr, value=value, type=type_) + dstAttribute.update() + + self._cache.append((srcAttribute, dstAttribute, srcMirrorValue)) + + def loadCache(self, blend=100, key=False, mirror=False, additive=False): + """ + Load the pose from the current cache. + + :type blend: float + :type key: bool + :type mirror: bool + :rtype: None + """ + cache = self.cache() + + for i in range(0, len(cache)): + srcAttribute, dstAttribute, srcMirrorValue = cache[i] + if srcAttribute and dstAttribute: + if mirror and srcMirrorValue is not None: + value = srcMirrorValue + else: + value = srcAttribute.value() + try: + dstAttribute.set(value, blend=blend, key=key, + additive=additive) + except (ValueError, RuntimeError): + cache[i] = (None, None) + logger.debug('Ignoring %s', dstAttribute.fullname()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/scriptjob.py b/2023/scripts/animation_tools/studiolibrary/mutils/scriptjob.py new file mode 100644 index 0000000..c0b7e11 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/scriptjob.py @@ -0,0 +1,38 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import traceback + +try: + import maya.cmds +except ImportError: + traceback.print_exc() + + +class ScriptJob(object): + """ + self._scriptJob = mutils.ScriptJob(e=['SelectionChanged', self.selectionChanged]) + """ + def __init__(self, *args, **kwargs): + self.id = maya.cmds.scriptJob(*args, **kwargs) + + def kill(self): + if self.id: + maya.cmds.scriptJob(kill=self.id, force=True) + self.id = None + + def __enter__(self): + return self + + def __exit__(self, t, v, tb): + if t is not None: + self.kill() diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/selectionset.py b/2023/scripts/animation_tools/studiolibrary/mutils/selectionset.py new file mode 100644 index 0000000..f9cea0d --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/selectionset.py @@ -0,0 +1,111 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging + +import mutils + +try: + import maya.cmds +except Exception: + import traceback + traceback.print_exc() + + +logger = logging.getLogger(__name__) + + +def saveSelectionSet(path, objects, metadata=None): + """ + Convenience function for saving a selection set to the given disc location. + + :type path: str + :type objects: list[str] + :type metadata: dict or None + :type args: list + :type kwargs: dict + :rtype: SelectionSet + """ + selectionSet = SelectionSet.fromObjects(objects) + + if metadata: + selectionSet.updateMetadata(metadata) + + selectionSet.save(path) + + return selectionSet + + +class SelectionSet(mutils.TransferObject): + + def load(self, objects=None, namespaces=None, **kwargs): + """ + Load/Select the transfer objects to the given objects or namespaces. + + :type objects: list[str] or None + :type namespaces: list[str] or None + :type kwargs: + """ + validNodes = [] + dstObjects = objects + srcObjects = self.objects() + + self.validate(namespaces=namespaces) + + matches = mutils.matchNames( + srcObjects, + dstObjects=dstObjects, + dstNamespaces=namespaces + ) + + for srcNode, dstNode in matches: + # Support for wild cards eg: ['*_control']. + if "*" in dstNode.name(): + validNodes.append(dstNode.name()) + else: + # Remove the first pipe in-case the object has a parent. + dstNode.stripFirstPipe() + + # Try to get the short name. Much faster than the long + # name when selecting objects. + try: + dstNode = dstNode.toShortName() + + except mutils.NoObjectFoundError as error: + logger.debug(error) + continue + + except mutils.MoreThanOneObjectFoundError as error: + logger.debug(error) + + validNodes.append(dstNode.name()) + + if validNodes: + maya.cmds.select(validNodes, **kwargs) + + # Return the focus to the Maya window + maya.cmds.setFocus("MayaWindow") + else: + text = "No objects match when loading data. " \ + "Turn on debug mode to see more details." + + raise mutils.NoMatchFoundError(text) + + def select(self, objects=None, namespaces=None, **kwargs): + """ + Convenience method for any classes inheriting SelectionSet. + + :type objects: str + :type namespaces: list[str] + :rtype: None + """ + SelectionSet.load(self, objects=objects, namespaces=namespaces, **kwargs) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/__init__.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/__init__.py new file mode 100644 index 0000000..ef3f5f7 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/__init__.py @@ -0,0 +1,40 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from mutils.tests.run import run + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/anim.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/anim.ma new file mode 100644 index 0000000..75740bf --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/anim.ma @@ -0,0 +1,84 @@ +//Maya ASCII 2013 scene +//Name: anim.ma +//Last modified: Wed, Aug 20, 2014 07:33:27 PM +//Codeset: UTF-8 +requires maya "2013"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya batch mode"; +fileInfo "version" "2013 Service Pack 2P12 x64"; +fileInfo "cutIdentifier" "201304120319-868747"; +fileInfo "osv" "Linux 3.5.4-2.10-desktop #1 SMP PREEMPT Fri Oct 5 14:56:49 CEST 2012 x86_64"; +createNode animCurveTA -n "CURVE1"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; +createNode animCurveTU -n "CURVE2"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "CURVE3"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; +createNode animCurveTL -n "CURVE4"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; +createNode animCurveTL -n "CURVE5"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; +createNode animCurveTU -n "CURVE6"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; +createNode animCurveTU -n "CURVE7"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 10; +createNode animCurveTU -n "CURVE8"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; +createNode animCurveTU -n "CURVE9"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "CURVE10"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; +createNode animCurveTU -n "CURVE11"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; +createNode animCurveTA -n "CURVE12"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; +createNode animCurveTU -n "CURVE13"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; +createNode animCurveTU -n "CURVE14"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; +createNode animCurveTU -n "CURVE15"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; +createNode animCurveTU -n "CURVE16"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "CURVE18"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 15; +// End \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/animation.anim b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/animation.anim new file mode 100644 index 0000000000000000000000000000000000000000..b08448442392f2b35f9ed1ef635d7b07850b1f53 GIT binary patch literal 3600 zcmeH~c{JNu8^?b|h#Az@P-!qG5^5b($EdbZZD<;zn6}nhr>RIpsUljjwA3D?=v3`n zi}I?7QcGg3w3d{X7)ynsLrcd}#moEtF{9_af4~2@_uTW``<(MV&pG#x@8@}N7(pRf z006*%jF9kYk*W^4KZO9`2^0XtwzIB8ypO9to=dt>sGqT+%Fe{%AW ziL$(uw|W#2D%m5A+i{7&^daTm4r31`&)^7I-Z(Ky|w zv7sP5kC`)fSVm>q0O=dEXbc{|bM%0xd@x>eb5(>93I9pPQJzjTw$v~}K75tUY7Q~} z1sba8GfHA9ce3V!>Y4# zh*%wxkjwxj!@%r8r<2w2it8;Mum?SfEkDl}y7Ip7gU_Nx+?ELRP()t6yTHu#Y|*a< z*b!=F{KmERJn!K#`8s1nxPvJ>s_Xe$-uwUtUwo)?Am94LSqN1My#dGMIz!s|8hzcP*R1TSH_&Z!nk!?M2;pg+2occyk+Pa-=?d^9HUxrSu2-5zjifFr;vr5Sb>&XL-R;OCSxDemVnT=q8 zp};~xvDf-gQz_xR_QF!#Rv&Ofxs+`3a{Tw?&MPag37&E(0(R#dB+Rm`3j#;qqPfug z-%MvP>VCOg)YQYEctwieKKJFt7%7m`T*IL3<%Nt|6oCk z2N`7!^TtsMB35jMBKuPRLfyeqB{tf~&1$;MT*0$(ZZkLkegTR%XL!Kd%MLo3tCqoo^>6My zb6n|cj3OZov@kK-e_yn=%j=w`4l+#>H!pNA+~gdH!LbO4n5iFNcAu%)NU)O~ZmTu3 z5x6HtMm8$!?=BjKgalnJjWw$YK=^sgvj|H_6mt%?C8i|V9(!<!>MF51S5ot8VJJ)q#=HZ=R58@N4$W?;jBPAqebAL`0ol#dAy5Sx1)pIzRf? zi*kn`ZY-*>2R*Wv{4oZP`*NP^z(NIr&3P9*wPgeSi5X#zHI4?{HI)m;7rAJ!DZ8PjYtA@H0{yALXFuRrCb{zlJ q0YD8^4)l-y<6GIc#Qa;f!_dDA?%Z$~&~^?01h;qDcEpPBy#5VE6OQEo literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/pose.json b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/pose.json new file mode 100644 index 0000000..81dad16 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/pose.json @@ -0,0 +1,166 @@ +{ + "metadata": { + "angularUnit": "deg", + "description": "test shot", + "user": "testuser", + "startTime": 1, + "mayaSceneFile": "/norman/work/krathjen/git/sandbox/site-packages/mutils/tests/data/test_anim.ma", + "timeUnit": "film", + "cTime": 646464451, + "mayaVersion": "2013 Service Pack 2P12 x64", + "linearUnit": "cm", + "version": "1.0.0", + "endTime": 48 + } +, + "objects": { + "srcSphere:offset": { + "attrs": {} + }, + "srcSphere:sphere": { + "attrs": { + "rotateX": { + "curve": "CURVE1", + "type": "doubleAngle", + "value": 45.0 + }, + "testEnum": { + "curve": "CURVE2", + "type": "enum", + "value": 1 + }, + "translateX": { + "curve": "CURVE3", + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "curve": "CURVE4", + "type": "doubleLinear", + "value": 8.0 + }, + "translateZ": { + "curve": "CURVE5", + "type": "doubleLinear", + "value": -12.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 50.0 + }, + "testFloat": { + "curve": "CURVE6", + "type": "double", + "value": 0.66600000000000004 + }, + "testAnimated": { + "curve": "CURVE7", + "type": "double", + "value": 0.0 + }, + "scaleX": { + "curve": "CURVE8", + "type": "double", + "value": 0.25 + }, + "scaleY": { + "type": "double", + "value": 4.6600000000000001 + }, + "visibility": { + "curve": "CURVE9", + "type": "bool", + "value": true + }, + "testString": { + "type": "string", + "value": "Hello world" + }, + "testVectorX": { + "curve": "CURVE10", + "type": "double", + "value": 0.20000000000000001 + }, + "testVectorY": { + "curve": "CURVE11", + "type": "double", + "value": 1.3999999999999999 + }, + "rotateZ": { + "curve": "CURVE12", + "type": "doubleAngle", + "value": 90.0 + }, + "testVectorZ": { + "curve": "CURVE13", + "type": "double", + "value": 2.6000000000000001 + }, + "scaleZ": { + "curve": "CURVE14", + "type": "double", + "value": 0.5 + }, + "testInteger": { + "curve": "CURVE15", + "type": "long", + "value": 5 + }, + "testBoolean": { + "curve": "CURVE16", + "type": "bool", + "value": true + }, + "testConnect": { + "type": "double", + "value": 8.0 + } + } + }, + "srcSphere:lockedNode": { + "attrs": { + "translateX": { + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "type": "doubleLinear", + "value": 5.0 + }, + "translateZ": { + "curve": "CURVE18", + "type": "doubleLinear", + "value": 0.0 + }, + "scaleX": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 1.0 + }, + "visibility": { + "type": "bool", + "value": true + }, + "rotateX": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateZ": { + "type": "doubleAngle", + "value": 0.0 + }, + "scaleZ": { + "type": "double", + "value": 1.0 + } + } + } + } +} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/sphere.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/sphere.ma new file mode 100644 index 0000000..8c89abc --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/sphere.ma @@ -0,0 +1,354 @@ +//Maya ASCII 2017 scene +//Name: sphere.ma +//Last modified: Sun, Feb 11, 2018 03:47:35 AM +//Codeset: 1252 +requires maya "2017"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2017"; +fileInfo "version" "2017"; +fileInfo "cutIdentifier" "201606150345-997974"; +fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n"; +createNode transform -s -n "persp"; + rename -uid "E076660C-4F85-B186-64D1-46849E688491"; + setAttr ".v" no; + setAttr ".t" -type "double3" 133.3110926639115 16.134754006216241 19.317795622267052 ; + setAttr ".r" -type "double3" -8.7383527296081347 79.400000000001739 0 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "00E21AC0-4731-C2C0-2E71-409F5D47F930"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 114.68216434604706; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + rename -uid "882E7E2C-450F-3325-2BB3-E09C8E2DEA5D"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 100.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "12B4F816-4EEE-299F-7183-A58F890C1FD5"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; +createNode transform -s -n "front"; + rename -uid "FD0E4029-44A6-7FDE-9CFF-FDBF36FCE708"; + setAttr ".v" no; + setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "8997F15C-4C97-598E-A50F-DA88CA1063E6"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 61.766282942468983; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; +createNode transform -s -n "side"; + rename -uid "CC57D42B-44BD-C01F-AB99-E6B928031F2B"; + setAttr ".v" no; + setAttr ".t" -type "double3" 100.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "B98CA35F-4DFD-36DE-7461-189C98891637"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; +createNode transform -n "group"; + rename -uid "BECCB461-41D0-BD8A-CC79-3591B57B0D18"; + addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message"; +createNode transform -n "offset" -p "group"; + rename -uid "16BDF72C-4277-8CD9-B837-22ACC6FF5F01"; + setAttr -l on ".v"; + setAttr -l on ".tx"; + setAttr -l on ".ty"; + setAttr -l on ".tz"; + setAttr -l on ".rx"; + setAttr -l on ".ry"; + setAttr -l on ".rz"; + setAttr -l on ".sx"; + setAttr -l on ".sy"; + setAttr -l on ".sz"; +createNode transform -n "lockedNode" -p "offset"; + rename -uid "C7E5AB1E-4BA2-E4D0-551E-FCA465DB50D6"; +lockNode -l 1 ; +createNode transform -n "sphere" -p "lockedNode"; + rename -uid "6D95DBB5-4D74-05BF-A95F-59887E9E743D"; + addAttr -ci true -sn "testVector" -ln "testVector" -at "double3" -nc 3; + addAttr -ci true -sn "testVectorX" -ln "testVectorX" -at "double" -p "testVector"; + addAttr -ci true -sn "testVectorY" -ln "testVectorY" -at "double" -p "testVector"; + addAttr -ci true -sn "testVectorZ" -ln "testVectorZ" -at "double" -p "testVector"; + addAttr -ci true -uac -sn "testColor" -ln "testColor" -at "float3" -nc 3; + addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor"; + addAttr -ci true -sn "testGreen" -ln "testGreen" -at "float" -p "testColor"; + addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor"; + addAttr -ci true -sn "testString" -ln "testString" -dt "string"; + addAttr -ci true -sn "testEnum" -ln "testEnum" -min 0 -max 2 -en "Apple:Lemon:Banana" + -at "enum"; + addAttr -ci true -sn "testFloat" -ln "testFloat" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testBoolean" -ln "testBoolean" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "testInteger" -ln "testInteger" -min 0 -max 10 -at "long"; + addAttr -ci true -sn "testLocked" -ln "testLocked" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testHidden" -ln "testHidden" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testConnect" -ln "testConnect" -at "double"; + addAttr -ci true -sn "testAnimated" -ln "testAnimated" -at "double"; + addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message"; + addAttr -ci true -sn "testLimit" -ln "testLimit" -dv 5 -min -10 -max 10 -at "double"; + addAttr -ci true -sn "testNonKeyable" -ln "testNonKeyable" -at "double"; + addAttr -uap -ci true -k true -sn "testProxy" -ln "testProxy" -dv 1 -at "double"; + setAttr -k on ".testVector"; + setAttr -k on ".testVectorX"; + setAttr -k on ".testVectorY"; + setAttr -k on ".testVectorZ"; + setAttr -k on ".testString"; + setAttr -k on ".testEnum" 2; + setAttr -k on ".testFloat"; + setAttr -k on ".testBoolean"; + setAttr -k on ".testInteger"; + setAttr -l on -k on ".testLocked"; + setAttr -k on ".testConnect"; + setAttr -k on ".testAnimated"; + setAttr -k on ".testLimit" 10; + setAttr -cb on ".testNonKeyable"; +createNode mesh -n "sphereShape" -p "sphere"; + rename -uid "A54E9E87-47A6-32A9-85C4-AFBAA8C21840"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".ugsdt" no; + setAttr ".vnm" 0; +createNode transform -n "pCube1"; + rename -uid "EB3530D0-4207-A5AE-6925-9D94CBDDD1F9"; + setAttr ".t" -type "double3" 0 0 -29.719509228177799 ; +createNode mesh -n "pCubeShape1" -p "pCube1"; + rename -uid "7E4B2133-4E80-F102-7998-A9B732FEACD1"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "BB27B0F0-4683-C766-9E0B-D2AFAEB1AFF6"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode displayLayerManager -n "layerManager"; + rename -uid "1270B817-40F6-0E8E-D20B-FD9B9195A9EE"; +createNode displayLayer -n "defaultLayer"; + rename -uid "23B6DA10-4D2D-10C6-9FAF-749F161B9716"; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "1308789F-439F-925D-3094-0B8AA9FBE17D"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "7827EACA-45F4-FC44-3C4C-368439DEC2B0"; + setAttr ".g" yes; +createNode polySphere -n "srcPolySphere"; + rename -uid "1B369F70-4317-2F4F-4C28-E18C566DC198"; + setAttr ".r" 4.1417806816985845; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "B0BF38E3-48B8-4929-20D7-45BD7DF0B488"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 "; + setAttr ".st" 6; +createNode animCurveTU -n "sphere_testAnimated"; + rename -uid "3A08FC92-43C1-C2D8-F4D3-98813CAFADB9"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 10; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "76FE07E3-4101-0D2E-BA83-308EDB6BAFB5"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "E4F59164-433D-3B5A-9EB0-858BC8193BA6"; +createNode polyCube -n "polyCube1"; + rename -uid "440FB0CB-44F5-D535-6B4E-6088139890E3"; + setAttr ".cuv" 4; +createNode objectSet -n "lockedSet"; + rename -uid "452516C3-40E5-8508-BCB2-8A8F6B2C0F4C"; + setAttr ".ihi" 0; + setAttr -l on ".dsm"; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "5F07C60B-437F-3FFF-82B2-9ABBA913F194"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n" + + " -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n" + + " -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n" + + "\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n" + + " -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n" + + " -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n" + + " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n" + + " -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n" + + " -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n" + + " -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n" + + " -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n" + + " -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n" + + " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n" + + " -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n" + + "\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n" + + " -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n" + + " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n" + + " -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n" + + " -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n" + + " -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n" + + " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n" + + " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n" + + " -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n" + + " -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n" + + " -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n" + + " -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1531\n -height 1022\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n" + + " modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n" + + " -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n" + + " -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1531\n -height 1022\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n" + + "\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 0\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n" + + " -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n" + + " -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 0\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n" + + " -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n" + + " -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n" + + " -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n" + + " -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 1\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n" + + " -resultSamples 0.96\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n" + + " -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n" + + " -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n" + + " -displayValues 0\n -autoFit 1\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 0.96\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n" + + "\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n" + + " -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n" + + " -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n" + + " -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n" + + " -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n" + + " -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"timeEditorPanel\" -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n" + + " clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n" + + " -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n" + + " -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n" + + " -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tshapePanel -unParent -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tposePanel -unParent -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\tscriptedPanel -e -to $panelName;\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"profilerPanel\" -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"contentBrowserPanel\" -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n" + + " -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n" + + " -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n" + + " -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"Stereo\" -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels `;\nstring $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n" + + " -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n" + + " -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n" + + " -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\nstring $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n" + + " -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n" + + " -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n" + + " -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n" + + "\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n" + + " -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n" + + " -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n" + + " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1531\\n -height 1022\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1531\\n -height 1022\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +select -ne :time1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".o" 1; + setAttr ".unw" 1; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 ; + setAttr ".vac" 2; +select -ne :renderPartition; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".st"; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 4 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; +select -ne :initialShadingGroup; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".dsm"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :defaultRenderGlobals; + setAttr ".ep" 1; +select -ne :defaultResolution; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -av ".w" 640; + setAttr -av ".h" 480; + setAttr -k on ".pa" 1; + setAttr -k on ".al"; + setAttr -av ".dar" 1.3333332538604736; + setAttr -k on ".ldar"; + setAttr -k on ".off"; + setAttr -k on ".fld"; + setAttr -k on ".zsl"; +select -ne :defaultLightSet; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :defaultColorMgtGlobals; + setAttr ".cme" no; +select -ne :hardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +connectAttr "sphere.msg" "group.testMessage" -l on; +connectAttr "sphere.ty" "sphere.testConnect"; +connectAttr "sphere_testAnimated.o" "sphere.testAnimated"; +connectAttr "group.msg" "sphere.testMessage" -l on; +connectAttr "pCube1.sz" "sphere.testProxy"; +connectAttr "srcPolySphere.out" "sphereShape.i"; +connectAttr "polyCube1.out" "pCubeShape1.i"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "sphere.iog" "lockedSet.dsm" -l on -na; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "sphereShape.iog" ":initialShadingGroup.dsm" -na; +connectAttr "pCubeShape1.iog" ":initialShadingGroup.dsm" -na; +// End of sphere.ma diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test.ma new file mode 100644 index 0000000..d89fb42 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test.ma @@ -0,0 +1,187 @@ +//Maya ASCII 2013 scene +//Name: test.ma +//Last modified: Thu, Jun 26, 2014 01:46:47 PM +//Codeset: UTF-8 +requires maya "2013"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2013"; +fileInfo "version" "2013 Service Pack 2P12 x64"; +fileInfo "cutIdentifier" "201304120319-868747"; +fileInfo "osv" "Linux 3.5.4-2.10-desktop #1 SMP PREEMPT Fri Oct 5 14:56:49 CEST 2012 x86_64"; +createNode animCurveTA -n "DELETE_NODE_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.rotateX"; +createNode animCurveTU -n "DELETE_NODE_testEnum"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testEnum"; +createNode animCurveTL -n "DELETE_NODE_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.translateX"; +createNode animCurveTL -n "DELETE_NODE_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.translateY"; +createNode animCurveTL -n "DELETE_NODE_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.translateZ"; +createNode animCurveTA -n "DELETE_NODE_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 25 10 -82.269409864294204; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.rotateY"; +createNode animCurveTU -n "DELETE_NODE_testFloat"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testFloat"; +createNode animCurveTU -n "DELETE_NODE_testAnimated"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 10; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testAnimated"; +createNode animCurveTU -n "DELETE_NODE_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.scaleX"; +createNode animCurveTU -n "DELETE_NODE_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.5 10 2.5775116688782669; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.scaleY"; +createNode animCurveTU -n "DELETE_NODE_visibility"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.visibility"; +createNode animCurveTU -n "DELETE_NODE_testVectorX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testVectorX"; +createNode animCurveTU -n "DELETE_NODE_testVectorY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testVectorY"; +createNode animCurveTA -n "DELETE_NODE_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.rotateZ"; +createNode animCurveTU -n "DELETE_NODE_testVectorZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testVectorZ"; +createNode animCurveTU -n "DELETE_NODE_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.scaleZ"; +createNode animCurveTU -n "DELETE_NODE_testInteger"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testInteger"; +createNode animCurveTU -n "DELETE_NODE_testBoolean"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; + setAttr -k on ".fullname" -type "string" "srcSphere:sphere.testBoolean"; +select -ne :time1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".o" 10; + setAttr ".unw" 10; +select -ne :renderPartition; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".st"; +select -ne :initialShadingGroup; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".dsm"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 3 ".r"; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; +select -ne :defaultResolution; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -av ".w"; + setAttr -av ".h"; + setAttr -k on ".pa" 1; + setAttr -k on ".al"; + setAttr -av ".dar"; + setAttr -k on ".ldar"; + setAttr -k on ".off"; + setAttr -k on ".fld"; + setAttr -k on ".zsl"; +select -ne :defaultLightSet; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :hardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 ; +select -ne :defaultHardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".fn" -type "string" "im"; + setAttr ".res" -type "string" "ntsc_4d 646 485 1.333"; +// End of test.ma diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_anim.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_anim.ma new file mode 100644 index 0000000..036f61e --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_anim.ma @@ -0,0 +1,429 @@ +//Maya ASCII 2014 scene +//Name: test_anim.ma +//Last modified: Sat, Mar 14, 2015 04:31:24 AM +//Codeset: 1252 +file -rdi 1 -ns "srcSphere" -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -rdi 1 -ns "dstSphere" -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -r -ns "srcSphere" -dr 1 -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -r -ns "dstSphere" -dr 1 -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +requires maya "2014"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2014"; +fileInfo "version" "2014 x64"; +fileInfo "cutIdentifier" "201303010241-864206"; +fileInfo "osv" "Microsoft Windows 7 Ultimate Edition, 64-bit Windows 7 Service Pack 1 (Build 7601)\n"; +createNode transform -s -n "persp"; + setAttr ".v" no; + setAttr ".t" -type "double3" -123.17900131274617 74.628663135067598 32.661032572240735 ; + setAttr ".r" -type "double3" -30.338352727390017 -72.599999999996271 0 ; +createNode camera -s -n "perspShape" -p "persp"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 150.42418693917088; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 100.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; +createNode transform -s -n "front"; + setAttr ".v" no; + setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ; +createNode camera -s -n "frontShape" -p "front"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 61.766282942468983; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; +createNode transform -s -n "side"; + setAttr ".v" no; + setAttr ".t" -type "double3" 100.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; +createNode lightLinker -s -n "lightLinker1"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode displayLayerManager -n "layerManager"; +createNode displayLayer -n "defaultLayer"; +createNode renderLayerManager -n "renderLayerManager"; +createNode renderLayer -n "defaultRenderLayer"; + setAttr ".g" yes; +createNode script -n "sceneConfigurationScriptNode"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 "; + setAttr ".st" 6; +createNode reference -n "srcSphereRN"; + setAttr -s 16 ".phl"; + setAttr ".phl[1]" 0; + setAttr ".phl[2]" 0; + setAttr ".phl[3]" 0; + setAttr ".phl[4]" 0; + setAttr ".phl[5]" 0; + setAttr ".phl[6]" 0; + setAttr ".phl[7]" 0; + setAttr ".phl[8]" 0; + setAttr ".phl[9]" 0; + setAttr ".phl[10]" 0; + setAttr ".phl[11]" 0; + setAttr ".phl[12]" 0; + setAttr ".phl[13]" 0; + setAttr ".phl[14]" 0; + setAttr ".phl[15]" 0; + setAttr ".phl[16]" 0; + setAttr ".ed" -type "dataReferenceEdits" + "srcSphereRN" + "srcSphereRN" 0 + "srcSphereRN" 45 + 1 |srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere + "testStatic" "testStatic" " -ci 1 -at \"double\"" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "visibility" " 1" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translate" " -type \"double3\" 0 5 0" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateX" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateY" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateZ" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotate" " -type \"double3\" 0 0 0" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateX" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateY" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateZ" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "scale" " -type \"double3\" 1 1 1" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "translate" " -type \"double3\" 0 8 -12" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "translateZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotate" " -type \"double3\" 45 50 90" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateX" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateY" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scale" " -type \"double3\" 0.25 4.66 0.5" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleX" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleY" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVector" " -k 1 -type \"double3\" 0.2 1.4 2.6" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVector" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorX" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorY" " -av -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorZ" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testColor" " -type \"float3\" 0.18 0.6 0.18" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testString" " -k 1 -type \"string\" \"Hello world\"" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testStatic" " -k 1 0" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.translateZ" + "srcSphereRN.placeHolderList[1]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorX" + "srcSphereRN.placeHolderList[2]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorY" + "srcSphereRN.placeHolderList[3]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorZ" + "srcSphereRN.placeHolderList[4]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testEnum" + "srcSphereRN.placeHolderList[5]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testFloat" + "srcSphereRN.placeHolderList[6]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testBoolean" + "srcSphereRN.placeHolderList[7]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testInteger" + "srcSphereRN.placeHolderList[8]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateY" + "srcSphereRN.placeHolderList[9]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateX" + "srcSphereRN.placeHolderList[10]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateZ" + "srcSphereRN.placeHolderList[11]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateX" + "srcSphereRN.placeHolderList[12]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateZ" + "srcSphereRN.placeHolderList[13]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleX" + "srcSphereRN.placeHolderList[14]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleZ" + "srcSphereRN.placeHolderList[15]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.visibility" + "srcSphereRN.placeHolderList[16]" ""; + setAttr ".ptag" -type "string" ""; +lockNode -l 1 ; +createNode reference -n "dstSphereRN"; + setAttr ".ed" -type "dataReferenceEdits" + "dstSphereRN" + "dstSphereRN" 0; + setAttr ".ptag" -type "string" ""; +lockNode -l 1 ; +createNode animCurveTU -n "srcSphere:sphere_visibility"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "srcSphere:sphere_translateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; +createNode animCurveTL -n "srcSphere:sphere_translateY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; +createNode animCurveTL -n "srcSphere:sphere_translateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; +createNode animCurveTA -n "srcSphere:sphere_rotateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; +createNode animCurveTA -n "srcSphere:sphere_rotateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; +createNode animCurveTU -n "srcSphere:sphere_scaleX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; +createNode animCurveTU -n "srcSphere:sphere_scaleZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; +createNode animCurveTU -n "srcSphere:sphere_testVectorX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; +createNode animCurveTU -n "srcSphere:sphere_testVectorY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; +createNode animCurveTU -n "srcSphere:sphere_testVectorZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; +createNode animCurveTU -n "srcSphere:sphere_testEnum"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "srcSphere:sphere_testFloat"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; +createNode animCurveTU -n "srcSphere:sphere_testBoolean"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "srcSphere:sphere_testInteger"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; +createNode animCurveTL -n "dstSphere:sphere_translateY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; +createNode animCurveTL -n "lockedNode_translateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 15; +createNode animCurveTU -n "sphere_testInteger"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; +createNode animCurveTU -n "sphere_testEnum"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "sphere_translateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; +createNode animCurveTL -n "sphere_translateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; +createNode animCurveTU -n "sphere_testFloat"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; +createNode animCurveTU -n "sphere_scaleX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; +createNode animCurveTU -n "sphere_testVectorZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; +createNode animCurveTU -n "sphere_scaleZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; +createNode animCurveTA -n "sphere_rotateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; +createNode animCurveTU -n "sphere_testVectorY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; +createNode animCurveTA -n "sphere_rotateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; +createNode animCurveTU -n "sphere_visibility"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "sphere_testVectorX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; +createNode animCurveTU -n "sphere_testBoolean"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "lockedNode_translateZ1"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 15; +createNode reference -n "sharedReferenceNode"; + setAttr ".ed" -type "dataReferenceEdits" + "sharedReferenceNode"; +select -ne :time1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".o" 1; + setAttr ".unw" 1; +select -ne :renderPartition; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".st"; +select -ne :initialShadingGroup; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".dsm"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 6 ".r"; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; +select -ne :defaultRenderGlobals; + setAttr ".ep" 1; +select -ne :defaultResolution; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -av ".w" 640; + setAttr -av ".h" 480; + setAttr -k on ".pa" 1; + setAttr -k on ".al"; + setAttr -av ".dar" 1.3333332538604736; + setAttr -k on ".ldar"; + setAttr -k on ".off"; + setAttr -k on ".fld"; + setAttr -k on ".zsl"; +select -ne :defaultLightSet; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :hardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 ; +select -ne :defaultHardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".fn" -type "string" "im"; + setAttr ".res" -type "string" "ntsc_4d 646 485 1.333"; +select -ne :ikSystem; + setAttr -s 4 ".sol"; +connectAttr "lockedNode_translateZ.o" "srcSphereRN.phl[1]"; +connectAttr "srcSphere:sphere_testVectorX.o" "srcSphereRN.phl[2]"; +connectAttr "srcSphere:sphere_testVectorY.o" "srcSphereRN.phl[3]"; +connectAttr "srcSphere:sphere_testVectorZ.o" "srcSphereRN.phl[4]"; +connectAttr "srcSphere:sphere_testEnum.o" "srcSphereRN.phl[5]"; +connectAttr "srcSphere:sphere_testFloat.o" "srcSphereRN.phl[6]"; +connectAttr "srcSphere:sphere_testBoolean.o" "srcSphereRN.phl[7]"; +connectAttr "srcSphere:sphere_testInteger.o" "srcSphereRN.phl[8]"; +connectAttr "srcSphere:sphere_translateY.o" "srcSphereRN.phl[9]"; +connectAttr "srcSphere:sphere_translateX.o" "srcSphereRN.phl[10]"; +connectAttr "srcSphere:sphere_translateZ.o" "srcSphereRN.phl[11]"; +connectAttr "srcSphere:sphere_rotateX.o" "srcSphereRN.phl[12]"; +connectAttr "srcSphere:sphere_rotateZ.o" "srcSphereRN.phl[13]"; +connectAttr "srcSphere:sphere_scaleX.o" "srcSphereRN.phl[14]"; +connectAttr "srcSphere:sphere_scaleZ.o" "srcSphereRN.phl[15]"; +connectAttr "srcSphere:sphere_visibility.o" "srcSphereRN.phl[16]"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "sharedReferenceNode.sr" "dstSphereRN.sr"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +// End of test_anim.ma diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/animation.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/animation.ma new file mode 100644 index 0000000..8f9113a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/animation.ma @@ -0,0 +1,29 @@ +//Maya ASCII 2016 scene +//Name: animation.ma +//Last modified: Tue, Aug 09, 2016 08:47:07 AM +//Codeset: 1252 +requires maya "2016"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2016"; +fileInfo "version" "2016"; +fileInfo "cutIdentifier" "201502261600-953408"; +fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n"; +createNode animCurveTU -n "CURVE1"; + rename -uid "B3A2D98C-465C-F630-EA7F-7A960B6B0B4D"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 10; +createNode animCurveTU -n "CURVE2"; + rename -uid "3A3C753F-43CD-18A5-3E19-E9B3F445D832"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 10 ".ktv[0:9]" 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 8 10 8; + setAttr -s 10 ".kit[9]" 1; + setAttr -s 10 ".kot[0:9]" 1 18 18 18 18 18 18 18 + 18 18; + setAttr -s 10 ".kix[9]" 1; + setAttr -s 10 ".kiy[9]" 0; + setAttr -s 10 ".kox[0:9]" 1 1 1 1 1 1 1 1 1 1; + setAttr -s 10 ".koy[0:9]" 0 0 0 0 0 0 0 0 0 0; +// End \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/animation.mb b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/animation.mb new file mode 100644 index 0000000000000000000000000000000000000000..a5aefe67fe6149e0f61234fbb12ecdc6b5f1dd79 GIT binary patch literal 27544 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/pose.json b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/pose.json new file mode 100644 index 0000000..f747de5 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.anim/pose.json @@ -0,0 +1,224 @@ +{ + "metadata": { + "mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_bake_connected.ma", + "angularUnit": "deg", + "ctime": "1518341545", + "endFrame": 10, + "linearUnit": "cm", + "version": "1.0.0", + "user": "Hovel", + "startFrame": 1, + "timeUnit": "film", + "mayaVersion": "2017" + } +, + "objects": { + "srcSphere:offset": { + "attrs": {} + }, + "srcSphere:group": { + "attrs": { + "translateX": { + "curve": "CURVE1", + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "curve": "CURVE2", + "type": "doubleLinear", + "value": 0.0 + }, + "translateZ": { + "curve": "CURVE3", + "type": "doubleLinear", + "value": 18.1320010846965 + }, + "scaleX": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 1.0 + }, + "visibility": { + "type": "bool", + "value": true + }, + "rotateX": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateZ": { + "type": "doubleAngle", + "value": 0.0 + }, + "scaleZ": { + "type": "double", + "value": 1.0 + } + } + }, + "srcSphere:sphere": { + "attrs": { + "testInteger": { + "curve": "CURVE5", + "type": "long", + "value": 5 + }, + "testProxy": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 4.66 + }, + "testLimit": { + "type": "double", + "value": 10.0 + }, + "testConnect": { + "curve": "CURVE6", + "type": "double", + "value": 8.0 + }, + "testEnum": { + "curve": "CURVE7", + "type": "enum", + "value": 1 + }, + "scaleX": { + "curve": "CURVE8", + "type": "double", + "value": 0.4295852781463779 + }, + "testString": { + "type": "string", + "value": "Hello world" + }, + "scaleZ": { + "curve": "CURVE9", + "type": "double", + "value": 0.8591705562927558 + }, + "rotateX": { + "curve": "CURVE10", + "type": "doubleAngle", + "value": 30.81018202226841 + }, + "rotateY": { + "type": "doubleAngle", + "value": 50.0 + }, + "rotateZ": { + "curve": "CURVE11", + "type": "doubleAngle", + "value": 149.70880463068096 + }, + "translateX": { + "curve": "CURVE12", + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "curve": "CURVE13", + "type": "doubleLinear", + "value": 8.0 + }, + "translateZ": { + "curve": "CURVE14", + "type": "doubleLinear", + "value": 11.214436147065292 + }, + "visibility": { + "curve": "CURVE15", + "type": "bool", + "value": true + }, + "testFloat": { + "curve": "CURVE16", + "type": "double", + "value": 0.666 + }, + "testAnimated": { + "curve": "CURVE17", + "type": "double", + "value": 10.0 + }, + "testVectorX": { + "curve": "CURVE18", + "type": "double", + "value": 0.2 + }, + "testVectorY": { + "curve": "CURVE19", + "type": "double", + "value": 1.4 + }, + "testVectorZ": { + "curve": "CURVE20", + "type": "double", + "value": 2.6 + }, + "testBoolean": { + "curve": "CURVE21", + "type": "bool", + "value": true + } + } + }, + "srcSphere:lockedNode": { + "attrs": { + "translateX": { + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "type": "doubleLinear", + "value": 5.0 + }, + "translateZ": { + "curve": "CURVE23", + "type": "doubleLinear", + "value": 15.0 + }, + "scaleX": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 1.0 + }, + "visibility": { + "type": "bool", + "value": true + }, + "rotateX": { + "curve": "CURVE24", + "type": "doubleAngle", + "value": 0.0 + }, + "rotateY": { + "curve": "CURVE25", + "type": "doubleAngle", + "value": -69.84190849889626 + }, + "rotateZ": { + "curve": "CURVE26", + "type": "doubleAngle", + "value": 0.0 + }, + "scaleZ": { + "type": "double", + "value": 1.0 + } + } + } + } +} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.ma new file mode 100644 index 0000000..4a8ff16 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_bake_connected.ma @@ -0,0 +1,636 @@ +//Maya ASCII 2013 scene +//Name: test_bake_connections.ma +//Last modified: Wed, Aug 20, 2014 02:40:58 PM +//Codeset: UTF-8 +file -rdi 1 -ns "srcSphere" -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -rdi 1 -ns "dstSphere" -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -r -ns "srcSphere" -dr 1 -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -r -ns "dstSphere" -dr 1 -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +requires maya "2013"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2013"; +fileInfo "version" "2013 Service Pack 2P12 x64"; +fileInfo "cutIdentifier" "201304120319-868747"; +fileInfo "osv" "Linux 3.5.4-2.10-desktop #1 SMP PREEMPT Fri Oct 5 14:56:49 CEST 2012 x86_64"; +createNode transform -s -n "persp"; + setAttr ".v" no; + setAttr ".t" -type "double3" 7.1985912106548611 102.16300347609724 -144.90732864886502 ; + setAttr ".r" -type "double3" -30.938352727397543 -178.19999999999578 0 ; +createNode camera -s -n "perspShape" -p "persp"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 163.53638497594133; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 100.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; +createNode transform -s -n "front"; + setAttr ".v" no; + setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ; +createNode camera -s -n "frontShape" -p "front"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 61.766282942468983; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; +createNode transform -s -n "side"; + setAttr ".v" no; + setAttr ".t" -type "double3" 100.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; +createNode transform -n "locator1"; +createNode locator -n "locatorShape1" -p "locator1"; + setAttr -k off ".v"; +createNode transform -n "locator2"; + setAttr ".t" -type "double3" 0 0 18.132001084696501 ; + setAttr ".s" -type "double3" 4.1257198596207596 4.1257198596207596 4.1257198596207596 ; +createNode locator -n "locatorShape2" -p "locator2"; + setAttr -k off ".v"; +createNode transform -n "srcSphereRNfosterParent1"; +createNode orientConstraint -n "lockedNode_orientConstraint1" -p "srcSphereRNfosterParent1"; + addAttr -ci true -k true -sn "w0" -ln "locator1W0" -dv 1 -min 0 -at "double"; + setAttr -k on ".nds"; + setAttr -k off ".v"; + setAttr -k off ".tx"; + setAttr -k off ".ty"; + setAttr -k off ".tz"; + setAttr -k off ".rx"; + setAttr -k off ".ry"; + setAttr -k off ".rz"; + setAttr -k off ".sx"; + setAttr -k off ".sy"; + setAttr -k off ".sz"; + setAttr ".erp" yes; + setAttr ".lr" -type "double3" 0 -69.84190849889626 0 ; + setAttr -k on ".w0"; +createNode lightLinker -s -n "lightLinker1"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode displayLayerManager -n "layerManager"; +createNode displayLayer -n "defaultLayer"; +createNode renderLayerManager -n "renderLayerManager"; +createNode renderLayer -n "defaultRenderLayer"; + setAttr ".g" yes; +createNode script -n "sceneConfigurationScriptNode"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 "; + setAttr ".st" 6; +createNode reference -n "srcSphereRN"; + setAttr -s 22 ".phl"; + setAttr ".phl[1]" 0; + setAttr ".phl[2]" 0; + setAttr ".phl[3]" 0; + setAttr ".phl[4]" 0; + setAttr ".phl[5]" 0; + setAttr ".phl[6]" 0; + setAttr ".phl[7]" 0; + setAttr ".phl[8]" 0; + setAttr ".phl[9]" 0; + setAttr ".phl[10]" 0; + setAttr ".phl[11]" 0; + setAttr ".phl[12]" 0; + setAttr ".phl[13]" 0; + setAttr ".phl[14]" 0; + setAttr ".phl[15]" 0; + setAttr ".phl[16]" 0; + setAttr ".phl[17]" 0; + setAttr ".phl[18]" 0; + setAttr ".phl[19]" 0; + setAttr ".phl[20]" 0; + setAttr ".phl[21]" 0; + setAttr ".phl[22]" 0; + setAttr ".ed" -type "dataReferenceEdits" + "srcSphereRN" + "srcSphereRN" 0 + "srcSphereRN" 50 + 0 "|srcSphereRNfosterParent1|lockedNode_orientConstraint1" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" + "-s -r " + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "visibility" " 1" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translate" " -type \"double3\" 0 5 15" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateX" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateY" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateZ" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotate" " -type \"double3\" 0 -69.841908 0" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateX" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateY" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateZ" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "scale" " -type \"double3\" 1 1 1" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "translate" " -type \"double3\" 0 8 11.214436" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "translateZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotate" " -type \"double3\" 30.810182 50 149.708805" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateX" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateY" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scale" " -type \"double3\" 0.429585 4.66 0.859171" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleX" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleY" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVector" " -k 1 -type \"double3\" 0.2 1.4 2.6" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVector" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorX" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorY" " -av -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorZ" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testColor" " -type \"float3\" 0.18 0.6 0.18" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testString" " -k 1 -type \"string\" \"Hello world\"" + 5 4 "srcSphereRN" "|srcSphere:group.translate" "srcSphereRN.placeHolderList[1]" + "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.translateZ" + "srcSphereRN.placeHolderList[2]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.rotateX" + "srcSphereRN.placeHolderList[3]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.rotateY" + "srcSphereRN.placeHolderList[4]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.rotateZ" + "srcSphereRN.placeHolderList[5]" "" + 5 3 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.rotateOrder" + "srcSphereRN.placeHolderList[6]" "" + 5 3 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.parentInverseMatrix" + "srcSphereRN.placeHolderList[7]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorX" + "srcSphereRN.placeHolderList[8]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorY" + "srcSphereRN.placeHolderList[9]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorZ" + "srcSphereRN.placeHolderList[10]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testEnum" + "srcSphereRN.placeHolderList[11]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testFloat" + "srcSphereRN.placeHolderList[12]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testBoolean" + "srcSphereRN.placeHolderList[13]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testInteger" + "srcSphereRN.placeHolderList[14]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateY" + "srcSphereRN.placeHolderList[15]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateX" + "srcSphereRN.placeHolderList[16]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateZ" + "srcSphereRN.placeHolderList[17]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateX" + "srcSphereRN.placeHolderList[18]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateZ" + "srcSphereRN.placeHolderList[19]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleX" + "srcSphereRN.placeHolderList[20]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleZ" + "srcSphereRN.placeHolderList[21]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.visibility" + "srcSphereRN.placeHolderList[22]" ""; + setAttr ".ptag" -type "string" ""; +lockNode -l 1 ; +createNode reference -n "dstSphereRN"; + setAttr ".ed" -type "dataReferenceEdits" + "dstSphereRN" + "dstSphereRN" 0; + setAttr ".ptag" -type "string" ""; +lockNode -l 1 ; +createNode animCurveTU -n "srcSphere:sphere_visibility"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "srcSphere:sphere_translateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; +createNode animCurveTL -n "srcSphere:sphere_translateY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; +createNode animCurveTL -n "srcSphere:sphere_translateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; +createNode animCurveTA -n "srcSphere:sphere_rotateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; +createNode animCurveTA -n "srcSphere:sphere_rotateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; +createNode animCurveTU -n "srcSphere:sphere_scaleX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; +createNode animCurveTU -n "srcSphere:sphere_scaleZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; +createNode animCurveTU -n "srcSphere:sphere_testVectorX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; +createNode animCurveTU -n "srcSphere:sphere_testVectorY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; +createNode animCurveTU -n "srcSphere:sphere_testVectorZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; +createNode animCurveTU -n "srcSphere:sphere_testEnum"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "srcSphere:sphere_testFloat"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; +createNode animCurveTU -n "srcSphere:sphere_testBoolean"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "srcSphere:sphere_testInteger"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; +createNode animCurveTL -n "dstSphere:sphere_translateY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; +createNode animCurveTL -n "lockedNode_translateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 15; +createNode animCurveTU -n "sphere_testInteger"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; +createNode animCurveTU -n "sphere_testEnum"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "sphere_translateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; +createNode animCurveTL -n "sphere_translateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; +createNode animCurveTU -n "sphere_testFloat"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; +createNode animCurveTU -n "sphere_scaleX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; +createNode animCurveTU -n "sphere_testVectorZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; +createNode animCurveTU -n "sphere_scaleZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; +createNode animCurveTA -n "sphere_rotateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; +createNode animCurveTU -n "sphere_testVectorY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; +createNode animCurveTA -n "sphere_rotateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; +createNode animCurveTU -n "sphere_visibility"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "sphere_testVectorX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; +createNode animCurveTU -n "sphere_testBoolean"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "lockedNode_translateZ1"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 15; +createNode reference -n "sharedReferenceNode"; + setAttr ".ed" -type "dataReferenceEdits" + "sharedReferenceNode"; +createNode animCurveTU -n "locator1_visibility"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "locator1_translateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 11.661339872825151 10 11.661339872825151; +createNode animCurveTL -n "locator1_translateY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 13.237957579056641 10 13.237957579056641; +createNode animCurveTL -n "locator1_translateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 11.944644232286457 10 11.944644232286457; +createNode animCurveTA -n "locator1_rotateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 0 10 0; +createNode animCurveTA -n "locator1_rotateY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 0 10 -69.84190849889626; +createNode animCurveTA -n "locator1_rotateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 0 10 0; +createNode animCurveTU -n "locator1_scaleX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 4.0680107858594825 10 4.0680107858594825; +createNode animCurveTU -n "locator1_scaleY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 4.0680107858594825 10 4.0680107858594825; +createNode animCurveTU -n "locator1_scaleZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 5 4.0680107858594825 10 4.0680107858594825; +select -ne :time1; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".o" 13; + setAttr -k on ".unw" 13; + setAttr -k on ".etw"; + setAttr -k on ".tps"; + setAttr -k on ".tms"; +lockNode -l 1 ; +select -ne :renderPartition; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".st"; + setAttr -cb on ".an"; + setAttr -cb on ".pt"; +lockNode -l 1 ; +select -ne :initialShadingGroup; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".dsm"; + setAttr -k on ".mwc"; + setAttr -cb on ".an"; + setAttr -cb on ".il"; + setAttr -cb on ".vo"; + setAttr -cb on ".eo"; + setAttr -cb on ".fo"; + setAttr -cb on ".epo"; + setAttr -k on ".ro" yes; +lockNode -l 1 ; +select -ne :initialParticleSE; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".mwc"; + setAttr -cb on ".an"; + setAttr -cb on ".il"; + setAttr -cb on ".vo"; + setAttr -cb on ".eo"; + setAttr -cb on ".fo"; + setAttr -cb on ".epo"; + setAttr -k on ".ro" yes; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 6 ".r"; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; +select -ne :defaultResolution; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -av ".w"; + setAttr -av ".h"; + setAttr -k on ".pa" 1; + setAttr -k on ".al"; + setAttr -av ".dar"; + setAttr -k on ".ldar"; + setAttr -k on ".off"; + setAttr -k on ".fld"; + setAttr -k on ".zsl"; +select -ne :defaultLightSet; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -k on ".bnm"; + setAttr -k on ".mwc"; + setAttr -k on ".an"; + setAttr -k on ".il"; + setAttr -k on ".vo"; + setAttr -k on ".eo"; + setAttr -k on ".fo"; + setAttr -k on ".epo"; + setAttr -k on ".ro" yes; +select -ne :defaultObjectSet; + setAttr ".ro" yes; +lockNode -l 1 ; +select -ne :hardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; + setAttr -k off ".fbfm"; + setAttr -k off -cb on ".ehql"; + setAttr -k off -cb on ".eams"; + setAttr -k off -cb on ".eeaa"; + setAttr -k off -cb on ".engm"; + setAttr -k off -cb on ".mes"; + setAttr -k off -cb on ".emb"; + setAttr -av -k off -cb on ".mbbf"; + setAttr -k off -cb on ".mbs"; + setAttr -k off -cb on ".trm"; + setAttr -k off -cb on ".tshc"; + setAttr -k off ".enpt"; + setAttr -k off -cb on ".clmt"; + setAttr -k off -cb on ".tcov"; + setAttr -k off -cb on ".lith"; + setAttr -k off -cb on ".sobc"; + setAttr -k off -cb on ".cuth"; + setAttr -k off -cb on ".hgcd"; + setAttr -k off -cb on ".hgci"; + setAttr -k off -cb on ".mgcs"; + setAttr -k off -cb on ".twa"; + setAttr -k off -cb on ".twz"; + setAttr -k on ".hwcc"; + setAttr -k on ".hwdp"; + setAttr -k on ".hwql"; + setAttr -k on ".hwfr"; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 ; +select -ne :defaultHardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -av -k on ".rp"; + setAttr -k on ".cai"; + setAttr -k on ".coi"; + setAttr -cb on ".bc"; + setAttr -av -k on ".bcb"; + setAttr -av -k on ".bcg"; + setAttr -av -k on ".bcr"; + setAttr -k on ".ei"; + setAttr -k on ".ex"; + setAttr -av -k on ".es"; + setAttr -av -k on ".ef"; + setAttr -av -k on ".bf"; + setAttr -k on ".fii"; + setAttr -av -k on ".sf"; + setAttr -k on ".gr"; + setAttr -k on ".li"; + setAttr -k on ".ls"; + setAttr -k on ".mb"; + setAttr -k on ".ti"; + setAttr -k on ".txt"; + setAttr -k on ".mpr"; + setAttr -k on ".wzd"; + setAttr ".fn" -type "string" "im"; + setAttr -k on ".if"; + setAttr ".res" -type "string" "ntsc_4d 646 485 1.333"; + setAttr -k on ".as"; + setAttr -k on ".ds"; + setAttr -k on ".lm"; + setAttr -k on ".fir"; + setAttr -k on ".aap"; + setAttr -k on ".gh"; + setAttr -cb on ".sd"; +lockNode -l 1 ; +connectAttr "locator2.t" "srcSphereRN.phl[1]"; +connectAttr "lockedNode_translateZ.o" "srcSphereRN.phl[2]"; +connectAttr "lockedNode_orientConstraint1.crx" "srcSphereRN.phl[3]"; +connectAttr "lockedNode_orientConstraint1.cry" "srcSphereRN.phl[4]"; +connectAttr "lockedNode_orientConstraint1.crz" "srcSphereRN.phl[5]"; +connectAttr "srcSphereRN.phl[6]" "lockedNode_orientConstraint1.cro"; +connectAttr "srcSphereRN.phl[7]" "lockedNode_orientConstraint1.cpim"; +connectAttr "srcSphere:sphere_testVectorX.o" "srcSphereRN.phl[8]"; +connectAttr "srcSphere:sphere_testVectorY.o" "srcSphereRN.phl[9]"; +connectAttr "srcSphere:sphere_testVectorZ.o" "srcSphereRN.phl[10]"; +connectAttr "srcSphere:sphere_testEnum.o" "srcSphereRN.phl[11]"; +connectAttr "srcSphere:sphere_testFloat.o" "srcSphereRN.phl[12]"; +connectAttr "srcSphere:sphere_testBoolean.o" "srcSphereRN.phl[13]"; +connectAttr "srcSphere:sphere_testInteger.o" "srcSphereRN.phl[14]"; +connectAttr "srcSphere:sphere_translateY.o" "srcSphereRN.phl[15]"; +connectAttr "srcSphere:sphere_translateX.o" "srcSphereRN.phl[16]"; +connectAttr "srcSphere:sphere_translateZ.o" "srcSphereRN.phl[17]"; +connectAttr "srcSphere:sphere_rotateX.o" "srcSphereRN.phl[18]"; +connectAttr "srcSphere:sphere_rotateZ.o" "srcSphereRN.phl[19]"; +connectAttr "srcSphere:sphere_scaleX.o" "srcSphereRN.phl[20]"; +connectAttr "srcSphere:sphere_scaleZ.o" "srcSphereRN.phl[21]"; +connectAttr "srcSphere:sphere_visibility.o" "srcSphereRN.phl[22]"; +connectAttr "locator1_rotateX.o" "locator1.rx"; +connectAttr "locator1_rotateY.o" "locator1.ry"; +connectAttr "locator1_rotateZ.o" "locator1.rz"; +connectAttr "locator1_visibility.o" "locator1.v"; +connectAttr "locator1_translateX.o" "locator1.tx"; +connectAttr "locator1_translateY.o" "locator1.ty"; +connectAttr "locator1_translateZ.o" "locator1.tz"; +connectAttr "locator1_scaleX.o" "locator1.sx"; +connectAttr "locator1_scaleY.o" "locator1.sy"; +connectAttr "locator1_scaleZ.o" "locator1.sz"; +connectAttr "locator1.r" "lockedNode_orientConstraint1.tg[0].tr"; +connectAttr "locator1.ro" "lockedNode_orientConstraint1.tg[0].tro"; +connectAttr "locator1.pm" "lockedNode_orientConstraint1.tg[0].tpm"; +connectAttr "lockedNode_orientConstraint1.w0" "lockedNode_orientConstraint1.tg[0].tw" + ; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "srcSphereRNfosterParent1.msg" "srcSphereRN.fp"; +connectAttr "sharedReferenceNode.sr" "dstSphereRN.sr"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +// End of test_bake_connections.ma diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_insert.anim/animation.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_insert.anim/animation.ma new file mode 100644 index 0000000..1ad6589 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_insert.anim/animation.ma @@ -0,0 +1,100 @@ +//Maya ASCII 2016 scene +//Name: animation.ma +//Last modified: Tue, Aug 09, 2016 08:47:07 AM +//Codeset: 1252 +requires maya "2016"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2016"; +fileInfo "version" "2016"; +fileInfo "cutIdentifier" "201502261600-953408"; +fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n"; +createNode animCurveTU -n "CURVE1"; + rename -uid "B4FA69EE-4158-445F-5AB5-769D92B60EE3"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; +createNode animCurveTU -n "CURVE2"; + rename -uid "CA0863B5-4680-36D0-E9A3-83A0A33EC51B"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "CURVE3"; + rename -uid "436929BD-4536-FD91-F836-FA9961D739F5"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; +createNode animCurveTU -n "CURVE4"; + rename -uid "9E217B7B-4585-8318-49F7-249A1ACBA95B"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; +createNode animCurveTA -n "CURVE5"; + rename -uid "5649AD20-440E-7866-8CAB-B08834F07905"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; +createNode animCurveTA -n "CURVE6"; + rename -uid "19E0B15E-449C-F085-5151-10BFD6772FE1"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; +createNode animCurveTL -n "CURVE7"; + rename -uid "1FE3DC07-4819-A244-0BC3-B8A3B3EF1275"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; +createNode animCurveTL -n "CURVE8"; + rename -uid "00984994-4BA2-5907-9C38-D1BE8279B667"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; +createNode animCurveTL -n "CURVE9"; + rename -uid "40524ED9-44E0-043B-4F9E-00ABB81FF2FA"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; +createNode animCurveTU -n "CURVE10"; + rename -uid "240A5025-4AA3-D27B-CBD9-3D98E97E7B2A"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "CURVE11"; + rename -uid "4541CB45-4FD7-656E-2626-0394702423B3"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; +createNode animCurveTU -n "CURVE12"; + rename -uid "55FC02E9-4D2D-FF69-A838-978CC1CA83B4"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 10; +createNode animCurveTU -n "CURVE13"; + rename -uid "CBF4DD9D-4839-361A-70F2-6990E98D9C30"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; +createNode animCurveTU -n "CURVE14"; + rename -uid "1A7FD955-44FC-DA80-17C8-F8B2936C2A64"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; +createNode animCurveTU -n "CURVE15"; + rename -uid "3F957170-4D7E-FD98-8F3E-6086609AB97F"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; +createNode animCurveTU -n "CURVE16"; + rename -uid "2EC19608-4057-B2F8-7796-27BB84CC1532"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "CURVE18"; + rename -uid "75AC48FC-4740-40A9-B0B6-AFB0FB0FAD85"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 15; +// End \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_insert.anim/animation.mb b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_insert.anim/animation.mb new file mode 100644 index 0000000000000000000000000000000000000000..0f9ee7478f66d6aa30f772857885444e24f30cc3 GIT binary patch literal 19296 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 QMN@lVlg!HpZ(``-UtzG$8UO$Q literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace_completely.anim/pose.json b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace_completely.anim/pose.json new file mode 100644 index 0000000..27d9c5a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_load_replace_completely.anim/pose.json @@ -0,0 +1,177 @@ +{ + "metadata": { + "mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_anim.ma", + "angularUnit": "deg", + "ctime": "1518341546", + "endFrame": 10, + "linearUnit": "cm", + "version": "1.0.0", + "user": "Hovel", + "startFrame": 1, + "timeUnit": "film", + "mayaVersion": "2017" + } +, + "objects": { + "srcSphere:offset": { + "attrs": {} + }, + "srcSphere:sphere": { + "attrs": { + "testInteger": { + "curve": "CURVE1", + "type": "long", + "value": 5 + }, + "testProxy": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 4.66 + }, + "testLimit": { + "type": "double", + "value": 10.0 + }, + "testConnect": { + "type": "double", + "value": 8.0 + }, + "testEnum": { + "curve": "CURVE2", + "type": "enum", + "value": 1 + }, + "scaleX": { + "curve": "CURVE3", + "type": "double", + "value": 0.25 + }, + "testString": { + "type": "string", + "value": "Hello world" + }, + "scaleZ": { + "curve": "CURVE4", + "type": "double", + "value": 0.5 + }, + "rotateX": { + "curve": "CURVE5", + "type": "doubleAngle", + "value": 45.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 50.0 + }, + "rotateZ": { + "curve": "CURVE6", + "type": "doubleAngle", + "value": 90.0 + }, + "testStatic": { + "type": "double", + "value": 0.0 + }, + "translateX": { + "curve": "CURVE7", + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "curve": "CURVE8", + "type": "doubleLinear", + "value": 8.0 + }, + "translateZ": { + "curve": "CURVE9", + "type": "doubleLinear", + "value": -12.0 + }, + "visibility": { + "curve": "CURVE10", + "type": "bool", + "value": true + }, + "testFloat": { + "curve": "CURVE11", + "type": "double", + "value": 0.666 + }, + "testAnimated": { + "curve": "CURVE12", + "type": "double", + "value": 0.0 + }, + "testVectorX": { + "curve": "CURVE13", + "type": "double", + "value": 0.2 + }, + "testVectorY": { + "curve": "CURVE14", + "type": "double", + "value": 1.4 + }, + "testVectorZ": { + "curve": "CURVE15", + "type": "double", + "value": 2.6 + }, + "testBoolean": { + "curve": "CURVE16", + "type": "bool", + "value": true + } + } + }, + "srcSphere:lockedNode": { + "attrs": { + "translateX": { + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "type": "doubleLinear", + "value": 5.0 + }, + "translateZ": { + "curve": "CURVE18", + "type": "doubleLinear", + "value": 0.0 + }, + "scaleX": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 1.0 + }, + "visibility": { + "type": "bool", + "value": true + }, + "rotateX": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateZ": { + "type": "doubleAngle", + "value": 0.0 + }, + "scaleZ": { + "type": "double", + "value": 1.0 + } + } + } + } +} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_mirror_tables.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_mirror_tables.ma new file mode 100644 index 0000000..1651558 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_mirror_tables.ma @@ -0,0 +1,748 @@ +//Maya ASCII 2014 scene +//Name: test_mirror_tables.ma +//Last modified: Thu, Sep 11, 2014 08:35:27 PM +//Codeset: 1252 +requires maya "2014"; +requires -nodeType "mentalrayFramebuffer" -nodeType "mentalrayOutputPass" -nodeType "mentalrayRenderPass" + -nodeType "mentalrayUserBuffer" -nodeType "mentalraySubdivApprox" -nodeType "mentalrayCurveApprox" + -nodeType "mentalraySurfaceApprox" -nodeType "mentalrayDisplaceApprox" -nodeType "mentalrayOptions" + -nodeType "mentalrayGlobals" -nodeType "mentalrayItemsList" -nodeType "mentalrayShader" + -nodeType "mentalrayUserData" -nodeType "mentalrayText" -nodeType "mentalrayTessellation" + -nodeType "mentalrayPhenomenon" -nodeType "mentalrayLightProfile" -nodeType "mentalrayVertexColors" + -nodeType "mentalrayIblShape" -nodeType "mapVizShape" -nodeType "mentalrayCCMeshProxy" + -nodeType "cylindricalLightLocator" -nodeType "discLightLocator" -nodeType "rectangularLightLocator" + -nodeType "sphericalLightLocator" -nodeType "abcimport" -nodeType "mia_physicalsun" + -nodeType "mia_physicalsky" -nodeType "mia_material" -nodeType "mia_material_x" -nodeType "mia_roundcorners" + -nodeType "mia_exposure_simple" -nodeType "mia_portal_light" -nodeType "mia_light_surface" + -nodeType "mia_exposure_photographic" -nodeType "mia_exposure_photographic_rev" -nodeType "mia_lens_bokeh" + -nodeType "mia_envblur" -nodeType "mia_ciesky" -nodeType "mia_photometric_light" + -nodeType "mib_texture_vector" -nodeType "mib_texture_remap" -nodeType "mib_texture_rotate" + -nodeType "mib_bump_basis" -nodeType "mib_bump_map" -nodeType "mib_passthrough_bump_map" + -nodeType "mib_bump_map2" -nodeType "mib_lookup_spherical" -nodeType "mib_lookup_cube1" + -nodeType "mib_lookup_cube6" -nodeType "mib_lookup_background" -nodeType "mib_lookup_cylindrical" + -nodeType "mib_texture_lookup" -nodeType "mib_texture_lookup2" -nodeType "mib_texture_filter_lookup" + -nodeType "mib_texture_checkerboard" -nodeType "mib_texture_polkadot" -nodeType "mib_texture_polkasphere" + -nodeType "mib_texture_turbulence" -nodeType "mib_texture_wave" -nodeType "mib_reflect" + -nodeType "mib_refract" -nodeType "mib_transparency" -nodeType "mib_continue" -nodeType "mib_opacity" + -nodeType "mib_twosided" -nodeType "mib_refraction_index" -nodeType "mib_dielectric" + -nodeType "mib_ray_marcher" -nodeType "mib_illum_lambert" -nodeType "mib_illum_phong" + -nodeType "mib_illum_ward" -nodeType "mib_illum_ward_deriv" -nodeType "mib_illum_blinn" + -nodeType "mib_illum_cooktorr" -nodeType "mib_illum_hair" -nodeType "mib_volume" + -nodeType "mib_color_alpha" -nodeType "mib_color_average" -nodeType "mib_color_intensity" + -nodeType "mib_color_interpolate" -nodeType "mib_color_mix" -nodeType "mib_color_spread" + -nodeType "mib_geo_cube" -nodeType "mib_geo_torus" -nodeType "mib_geo_sphere" -nodeType "mib_geo_cone" + -nodeType "mib_geo_cylinder" -nodeType "mib_geo_square" -nodeType "mib_geo_instance" + -nodeType "mib_geo_instance_mlist" -nodeType "mib_geo_add_uv_texsurf" -nodeType "mib_photon_basic" + -nodeType "mib_light_infinite" -nodeType "mib_light_point" -nodeType "mib_light_spot" + -nodeType "mib_light_photometric" -nodeType "mib_cie_d" -nodeType "mib_blackbody" + -nodeType "mib_shadow_transparency" -nodeType "mib_lens_stencil" -nodeType "mib_lens_clamp" + -nodeType "mib_lightmap_write" -nodeType "mib_lightmap_sample" -nodeType "mib_amb_occlusion" + -nodeType "mib_fast_occlusion" -nodeType "mib_map_get_scalar" -nodeType "mib_map_get_integer" + -nodeType "mib_map_get_vector" -nodeType "mib_map_get_color" -nodeType "mib_map_get_transform" + -nodeType "mib_map_get_scalar_array" -nodeType "mib_map_get_integer_array" -nodeType "mib_fg_occlusion" + -nodeType "mib_bent_normal_env" -nodeType "mib_glossy_reflection" -nodeType "mib_glossy_refraction" + -nodeType "builtin_bsdf_architectural" -nodeType "builtin_bsdf_architectural_comp" + -nodeType "builtin_bsdf_carpaint" -nodeType "builtin_bsdf_ashikhmin" -nodeType "builtin_bsdf_lambert" + -nodeType "builtin_bsdf_mirror" -nodeType "builtin_bsdf_phong" -nodeType "contour_store_function" + -nodeType "contour_store_function_simple" -nodeType "contour_contrast_function_levels" + -nodeType "contour_contrast_function_simple" -nodeType "contour_shader_simple" -nodeType "contour_shader_silhouette" + -nodeType "contour_shader_maxcolor" -nodeType "contour_shader_curvature" -nodeType "contour_shader_factorcolor" + -nodeType "contour_shader_depthfade" -nodeType "contour_shader_framefade" -nodeType "contour_shader_layerthinner" + -nodeType "contour_shader_widthfromcolor" -nodeType "contour_shader_widthfromlightdir" + -nodeType "contour_shader_widthfromlight" -nodeType "contour_shader_combi" -nodeType "contour_only" + -nodeType "contour_composite" -nodeType "contour_ps" -nodeType "mi_metallic_paint" + -nodeType "mi_metallic_paint_x" -nodeType "mi_bump_flakes" -nodeType "mi_car_paint_phen" + -nodeType "mi_metallic_paint_output_mixer" -nodeType "mi_car_paint_phen_x" -nodeType "physical_lens_dof" + -nodeType "physical_light" -nodeType "dgs_material" -nodeType "dgs_material_photon" + -nodeType "dielectric_material" -nodeType "dielectric_material_photon" -nodeType "oversampling_lens" + -nodeType "path_material" -nodeType "parti_volume" -nodeType "parti_volume_photon" + -nodeType "transmat" -nodeType "transmat_photon" -nodeType "mip_rayswitch" -nodeType "mip_rayswitch_advanced" + -nodeType "mip_rayswitch_environment" -nodeType "mip_card_opacity" -nodeType "mip_motionblur" + -nodeType "mip_motion_vector" -nodeType "mip_matteshadow" -nodeType "mip_cameramap" + -nodeType "mip_mirrorball" -nodeType "mip_grayball" -nodeType "mip_gamma_gain" -nodeType "mip_render_subset" + -nodeType "mip_matteshadow_mtl" -nodeType "mip_binaryproxy" -nodeType "mip_rayswitch_stage" + -nodeType "mip_fgshooter" -nodeType "mib_ptex_lookup" -nodeType "misss_physical" + -nodeType "misss_physical_phen" -nodeType "misss_fast_shader" -nodeType "misss_fast_shader_x" + -nodeType "misss_fast_shader2" -nodeType "misss_fast_shader2_x" -nodeType "misss_skin_specular" + -nodeType "misss_lightmap_write" -nodeType "misss_lambert_gamma" -nodeType "misss_call_shader" + -nodeType "misss_set_normal" -nodeType "misss_fast_lmap_maya" -nodeType "misss_fast_simple_maya" + -nodeType "misss_fast_skin_maya" -nodeType "misss_fast_skin_phen" -nodeType "misss_fast_skin_phen_d" + -nodeType "misss_mia_skin2_phen" -nodeType "misss_mia_skin2_phen_d" -nodeType "misss_lightmap_phen" + -nodeType "misss_mia_skin2_surface_phen" -nodeType "surfaceSampler" -nodeType "mib_data_bool" + -nodeType "mib_data_int" -nodeType "mib_data_scalar" -nodeType "mib_data_vector" + -nodeType "mib_data_color" -nodeType "mib_data_string" -nodeType "mib_data_texture" + -nodeType "mib_data_shader" -nodeType "mib_data_bool_array" -nodeType "mib_data_int_array" + -nodeType "mib_data_scalar_array" -nodeType "mib_data_vector_array" -nodeType "mib_data_color_array" + -nodeType "mib_data_string_array" -nodeType "mib_data_texture_array" -nodeType "mib_data_shader_array" + -nodeType "mib_data_get_bool" -nodeType "mib_data_get_int" -nodeType "mib_data_get_scalar" + -nodeType "mib_data_get_vector" -nodeType "mib_data_get_color" -nodeType "mib_data_get_string" + -nodeType "mib_data_get_texture" -nodeType "mib_data_get_shader" -nodeType "mib_data_get_shader_bool" + -nodeType "mib_data_get_shader_int" -nodeType "mib_data_get_shader_scalar" -nodeType "mib_data_get_shader_vector" + -nodeType "mib_data_get_shader_color" -nodeType "user_ibl_env" -nodeType "user_ibl_rect" + -nodeType "mia_material_x_passes" -nodeType "mi_metallic_paint_x_passes" -nodeType "mi_car_paint_phen_x_passes" + -nodeType "misss_fast_shader_x_passes" -dataType "byteArray" "Mayatomr" "2014.0 - 3.11.1.4 "; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2014"; +fileInfo "version" "2014 x64"; +fileInfo "cutIdentifier" "201303010241-864206"; +fileInfo "osv" "Microsoft Windows 7 Ultimate Edition, 64-bit Windows 7 Service Pack 1 (Build 7601)\n"; +createNode transform -s -n "persp"; + setAttr ".v" no; + setAttr ".t" -type "double3" 22.248422999787756 12.500732575524742 10.391306855519792 ; + setAttr ".r" -type "double3" -28.538352729610519 64.599999999998701 -3.7075007778321079e-015 ; +createNode camera -s -n "perspShape" -p "persp"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 27.199165290100083; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 100.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; +createNode transform -s -n "front"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 100.1 ; +createNode camera -s -n "frontShape" -p "front"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; +createNode transform -s -n "side"; + setAttr ".v" no; + setAttr ".t" -type "double3" 100.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; +createNode transform -n "Group"; +createNode transform -n "Group2" -p "Group"; +createNode transform -n "cubeR" -p "Group2"; + setAttr ".t" -type "double3" -5 0 0 ; +createNode mesh -n "cubeRShape" -p "cubeR"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; +createNode transform -n "cubeL" -p "Group2"; + setAttr ".t" -type "double3" 5 -1.7155814546566843 0 ; +createNode mesh -n "cubeLShape" -p "cubeL"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 14 ".uvst[0].uvsp[0:13]" -type "float2" 0.375 0 0.625 0 0.375 + 0.25 0.625 0.25 0.375 0.5 0.625 0.5 0.375 0.75 0.625 0.75 0.375 1 0.625 1 0.875 0 + 0.875 0.25 0.125 0 0.125 0.25; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 8 ".vt[0:7]" -0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5 + -0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5; + setAttr -s 12 ".ed[0:11]" 0 1 0 2 3 0 4 5 0 6 7 0 0 2 0 1 3 0 2 4 0 + 3 5 0 4 6 0 5 7 0 6 0 0 7 1 0; + setAttr -s 6 -ch 24 ".fc[0:5]" -type "polyFaces" + f 4 0 5 -2 -5 + mu 0 4 0 1 3 2 + f 4 1 7 -3 -7 + mu 0 4 2 3 5 4 + f 4 2 9 -4 -9 + mu 0 4 4 5 7 6 + f 4 3 11 -1 -11 + mu 0 4 6 7 9 8 + f 4 -12 -10 -8 -6 + mu 0 4 1 10 11 3 + f 4 10 4 6 8 + mu 0 4 12 0 2 13; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "Group3" -p "Group"; + setAttr ".t" -type "double3" 0 0 -2.8742420497365515 ; +createNode transform -n "R_cube" -p "Group3"; + setAttr ".t" -type "double3" -5 -0.71903628511057072 0 ; +createNode mesh -n "R_cubeShape" -p "R_cube"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 14 ".uvst[0].uvsp[0:13]" -type "float2" 0.375 0 0.625 0 0.375 + 0.25 0.625 0.25 0.375 0.5 0.625 0.5 0.375 0.75 0.625 0.75 0.375 1 0.625 1 0.875 0 + 0.875 0.25 0.125 0 0.125 0.25; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 8 ".vt[0:7]" -0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5 + -0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5; + setAttr -s 12 ".ed[0:11]" 0 1 0 2 3 0 4 5 0 6 7 0 0 2 0 1 3 0 2 4 0 + 3 5 0 4 6 0 5 7 0 6 0 0 7 1 0; + setAttr -s 6 -ch 24 ".fc[0:5]" -type "polyFaces" + f 4 0 5 -2 -5 + mu 0 4 0 1 3 2 + f 4 1 7 -3 -7 + mu 0 4 2 3 5 4 + f 4 2 9 -4 -9 + mu 0 4 4 5 7 6 + f 4 3 11 -1 -11 + mu 0 4 6 7 9 8 + f 4 -12 -10 -8 -6 + mu 0 4 1 10 11 3 + f 4 10 4 6 8 + mu 0 4 12 0 2 13; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode transform -n "L_cube" -p "Group3"; + setAttr ".t" -type "double3" 2.1362195941342836 4.3031875715542744 0 ; + setAttr -av ".tx"; + setAttr -av ".ty"; +createNode mesh -n "L_cubeShape" -p "L_cube"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr -s 14 ".uvst[0].uvsp[0:13]" -type "float2" 0.375 0 0.625 0 0.375 + 0.25 0.625 0.25 0.375 0.5 0.625 0.5 0.375 0.75 0.625 0.75 0.375 1 0.625 1 0.875 0 + 0.875 0.25 0.125 0 0.125 0.25; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr -s 8 ".vt[0:7]" -0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5 + -0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5; + setAttr -s 12 ".ed[0:11]" 0 1 0 2 3 0 4 5 0 6 7 0 0 2 0 1 3 0 2 4 0 + 3 5 0 4 6 0 5 7 0 6 0 0 7 1 0; + setAttr -s 6 -ch 24 ".fc[0:5]" -type "polyFaces" + f 4 0 5 -2 -5 + mu 0 4 0 1 3 2 + f 4 1 7 -3 -7 + mu 0 4 2 3 5 4 + f 4 2 9 -4 -9 + mu 0 4 4 5 7 6 + f 4 3 11 -1 -11 + mu 0 4 6 7 9 8 + f 4 -12 -10 -8 -6 + mu 0 4 1 10 11 3 + f 4 10 4 6 8 + mu 0 4 12 0 2 13; + setAttr ".cd" -type "dataPolyComponent" Index_Data Edge 0 ; + setAttr ".cvd" -type "dataPolyComponent" Index_Data Vertex 0 ; + setAttr ".hfd" -type "dataPolyComponent" Index_Data Face 0 ; +createNode mentalrayItemsList -s -n "mentalrayItemsList"; +createNode mentalrayGlobals -s -n "mentalrayGlobals"; +createNode mentalrayOptions -s -n "miDefaultOptions"; + addAttr -ci true -m -sn "stringOptions" -ln "stringOptions" -at "compound" -nc + 3; + addAttr -ci true -sn "name" -ln "name" -dt "string" -p "stringOptions"; + addAttr -ci true -sn "value" -ln "value" -dt "string" -p "stringOptions"; + addAttr -ci true -sn "type" -ln "type" -dt "string" -p "stringOptions"; + addAttr -ci true -sn "miSamplesQualityR" -ln "miSamplesQualityR" -dv 0.25 -min 0.01 + -max 9999999.9000000004 -smn 0.1 -smx 2 -at "double"; + addAttr -ci true -sn "miSamplesQualityG" -ln "miSamplesQualityG" -dv 0.25 -min 0.01 + -max 9999999.9000000004 -smn 0.1 -smx 2 -at "double"; + addAttr -ci true -sn "miSamplesQualityB" -ln "miSamplesQualityB" -dv 0.25 -min 0.01 + -max 9999999.9000000004 -smn 0.1 -smx 2 -at "double"; + addAttr -ci true -sn "miSamplesQualityA" -ln "miSamplesQualityA" -dv 0.25 -min 0.01 + -max 9999999.9000000004 -smn 0.1 -smx 2 -at "double"; + addAttr -ci true -sn "miSamplesMin" -ln "miSamplesMin" -dv 1 -min 0.1 -at "double"; + addAttr -ci true -sn "miSamplesMax" -ln "miSamplesMax" -dv 100 -min 0.1 -at "double"; + addAttr -ci true -sn "miSamplesErrorCutoffR" -ln "miSamplesErrorCutoffR" -min 0 + -max 1 -at "double"; + addAttr -ci true -sn "miSamplesErrorCutoffG" -ln "miSamplesErrorCutoffG" -min 0 + -max 1 -at "double"; + addAttr -ci true -sn "miSamplesErrorCutoffB" -ln "miSamplesErrorCutoffB" -min 0 + -max 1 -at "double"; + addAttr -ci true -sn "miSamplesErrorCutoffA" -ln "miSamplesErrorCutoffA" -min 0 + -max 1 -at "double"; + addAttr -ci true -sn "miSamplesPerObject" -ln "miSamplesPerObject" -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "miRastShadingSamples" -ln "miRastShadingSamples" -dv 1 -min + 0.25 -at "double"; + addAttr -ci true -sn "miRastSamples" -ln "miRastSamples" -dv 3 -min 1 -at "long"; + addAttr -ci true -sn "miContrastAsColor" -ln "miContrastAsColor" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "miProgMaxTime" -ln "miProgMaxTime" -min 0 -at "long"; + addAttr -ci true -sn "miProgSubsampleSize" -ln "miProgSubsampleSize" -dv 4 -min + 1 -at "long"; + addAttr -ci true -sn "miTraceCameraMotionVectors" -ln "miTraceCameraMotionVectors" + -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "miTraceCameraClip" -ln "miTraceCameraClip" -min 0 -max 1 -at "bool"; + setAttr -s 45 ".stringOptions"; + setAttr ".stringOptions[0].name" -type "string" "rast motion factor"; + setAttr ".stringOptions[0].value" -type "string" "1.0"; + setAttr ".stringOptions[0].type" -type "string" "scalar"; + setAttr ".stringOptions[1].name" -type "string" "rast transparency depth"; + setAttr ".stringOptions[1].value" -type "string" "8"; + setAttr ".stringOptions[1].type" -type "string" "integer"; + setAttr ".stringOptions[2].name" -type "string" "rast useopacity"; + setAttr ".stringOptions[2].value" -type "string" "true"; + setAttr ".stringOptions[2].type" -type "string" "boolean"; + setAttr ".stringOptions[3].name" -type "string" "importon"; + setAttr ".stringOptions[3].value" -type "string" "false"; + setAttr ".stringOptions[3].type" -type "string" "boolean"; + setAttr ".stringOptions[4].name" -type "string" "importon density"; + setAttr ".stringOptions[4].value" -type "string" "1.0"; + setAttr ".stringOptions[4].type" -type "string" "scalar"; + setAttr ".stringOptions[5].name" -type "string" "importon merge"; + setAttr ".stringOptions[5].value" -type "string" "0.0"; + setAttr ".stringOptions[5].type" -type "string" "scalar"; + setAttr ".stringOptions[6].name" -type "string" "importon trace depth"; + setAttr ".stringOptions[6].value" -type "string" "0"; + setAttr ".stringOptions[6].type" -type "string" "integer"; + setAttr ".stringOptions[7].name" -type "string" "importon traverse"; + setAttr ".stringOptions[7].value" -type "string" "true"; + setAttr ".stringOptions[7].type" -type "string" "boolean"; + setAttr ".stringOptions[8].name" -type "string" "shadowmap pixel samples"; + setAttr ".stringOptions[8].value" -type "string" "3"; + setAttr ".stringOptions[8].type" -type "string" "integer"; + setAttr ".stringOptions[9].name" -type "string" "ambient occlusion"; + setAttr ".stringOptions[9].value" -type "string" "false"; + setAttr ".stringOptions[9].type" -type "string" "boolean"; + setAttr ".stringOptions[10].name" -type "string" "ambient occlusion rays"; + setAttr ".stringOptions[10].value" -type "string" "256"; + setAttr ".stringOptions[10].type" -type "string" "integer"; + setAttr ".stringOptions[11].name" -type "string" "ambient occlusion cache"; + setAttr ".stringOptions[11].value" -type "string" "false"; + setAttr ".stringOptions[11].type" -type "string" "boolean"; + setAttr ".stringOptions[12].name" -type "string" "ambient occlusion cache density"; + setAttr ".stringOptions[12].value" -type "string" "1.0"; + setAttr ".stringOptions[12].type" -type "string" "scalar"; + setAttr ".stringOptions[13].name" -type "string" "ambient occlusion cache points"; + setAttr ".stringOptions[13].value" -type "string" "64"; + setAttr ".stringOptions[13].type" -type "string" "integer"; + setAttr ".stringOptions[14].name" -type "string" "irradiance particles"; + setAttr ".stringOptions[14].value" -type "string" "false"; + setAttr ".stringOptions[14].type" -type "string" "boolean"; + setAttr ".stringOptions[15].name" -type "string" "irradiance particles rays"; + setAttr ".stringOptions[15].value" -type "string" "256"; + setAttr ".stringOptions[15].type" -type "string" "integer"; + setAttr ".stringOptions[16].name" -type "string" "irradiance particles interpolate"; + setAttr ".stringOptions[16].value" -type "string" "1"; + setAttr ".stringOptions[16].type" -type "string" "integer"; + setAttr ".stringOptions[17].name" -type "string" "irradiance particles interppoints"; + setAttr ".stringOptions[17].value" -type "string" "64"; + setAttr ".stringOptions[17].type" -type "string" "integer"; + setAttr ".stringOptions[18].name" -type "string" "irradiance particles indirect passes"; + setAttr ".stringOptions[18].value" -type "string" "0"; + setAttr ".stringOptions[18].type" -type "string" "integer"; + setAttr ".stringOptions[19].name" -type "string" "irradiance particles scale"; + setAttr ".stringOptions[19].value" -type "string" "1.0"; + setAttr ".stringOptions[19].type" -type "string" "scalar"; + setAttr ".stringOptions[20].name" -type "string" "irradiance particles env"; + setAttr ".stringOptions[20].value" -type "string" "true"; + setAttr ".stringOptions[20].type" -type "string" "boolean"; + setAttr ".stringOptions[21].name" -type "string" "irradiance particles env rays"; + setAttr ".stringOptions[21].value" -type "string" "256"; + setAttr ".stringOptions[21].type" -type "string" "integer"; + setAttr ".stringOptions[22].name" -type "string" "irradiance particles env scale"; + setAttr ".stringOptions[22].value" -type "string" "1"; + setAttr ".stringOptions[22].type" -type "string" "integer"; + setAttr ".stringOptions[23].name" -type "string" "irradiance particles rebuild"; + setAttr ".stringOptions[23].value" -type "string" "true"; + setAttr ".stringOptions[23].type" -type "string" "boolean"; + setAttr ".stringOptions[24].name" -type "string" "irradiance particles file"; + setAttr ".stringOptions[24].value" -type "string" ""; + setAttr ".stringOptions[24].type" -type "string" "string"; + setAttr ".stringOptions[25].name" -type "string" "geom displace motion factor"; + setAttr ".stringOptions[25].value" -type "string" "1.0"; + setAttr ".stringOptions[25].type" -type "string" "scalar"; + setAttr ".stringOptions[26].name" -type "string" "contrast all buffers"; + setAttr ".stringOptions[26].value" -type "string" "true"; + setAttr ".stringOptions[26].type" -type "string" "boolean"; + setAttr ".stringOptions[27].name" -type "string" "finalgather normal tolerance"; + setAttr ".stringOptions[27].value" -type "string" "25.842"; + setAttr ".stringOptions[27].type" -type "string" "scalar"; + setAttr ".stringOptions[28].name" -type "string" "trace camera clip"; + setAttr ".stringOptions[28].value" -type "string" "false"; + setAttr ".stringOptions[28].type" -type "string" "boolean"; + setAttr ".stringOptions[29].name" -type "string" "unified sampling"; + setAttr ".stringOptions[29].value" -type "string" "true"; + setAttr ".stringOptions[29].type" -type "string" "boolean"; + setAttr ".stringOptions[30].name" -type "string" "samples quality"; + setAttr ".stringOptions[30].value" -type "string" "0.5 0.5 0.5 0.5"; + setAttr ".stringOptions[30].type" -type "string" "color"; + setAttr ".stringOptions[31].name" -type "string" "samples min"; + setAttr ".stringOptions[31].value" -type "string" "1.0"; + setAttr ".stringOptions[31].type" -type "string" "scalar"; + setAttr ".stringOptions[32].name" -type "string" "samples max"; + setAttr ".stringOptions[32].value" -type "string" "100.0"; + setAttr ".stringOptions[32].type" -type "string" "scalar"; + setAttr ".stringOptions[33].name" -type "string" "samples error cutoff"; + setAttr ".stringOptions[33].value" -type "string" "0.0 0.0 0.0 0.0"; + setAttr ".stringOptions[33].type" -type "string" "color"; + setAttr ".stringOptions[34].name" -type "string" "samples per object"; + setAttr ".stringOptions[34].value" -type "string" "false"; + setAttr ".stringOptions[34].type" -type "string" "boolean"; + setAttr ".stringOptions[35].name" -type "string" "progressive"; + setAttr ".stringOptions[35].value" -type "string" "false"; + setAttr ".stringOptions[35].type" -type "string" "boolean"; + setAttr ".stringOptions[36].name" -type "string" "progressive max time"; + setAttr ".stringOptions[36].value" -type "string" "0"; + setAttr ".stringOptions[36].type" -type "string" "integer"; + setAttr ".stringOptions[37].name" -type "string" "progressive subsampling size"; + setAttr ".stringOptions[37].value" -type "string" "1"; + setAttr ".stringOptions[37].type" -type "string" "integer"; + setAttr ".stringOptions[38].name" -type "string" "iray"; + setAttr ".stringOptions[38].value" -type "string" "false"; + setAttr ".stringOptions[38].type" -type "string" "boolean"; + setAttr ".stringOptions[39].name" -type "string" "light relative scale"; + setAttr ".stringOptions[39].value" -type "string" "0.31831"; + setAttr ".stringOptions[39].type" -type "string" "scalar"; + setAttr ".stringOptions[40].name" -type "string" "trace camera motion vectors"; + setAttr ".stringOptions[40].value" -type "string" "false"; + setAttr ".stringOptions[40].type" -type "string" "boolean"; + setAttr ".stringOptions[41].name" -type "string" "ray differentials"; + setAttr ".stringOptions[41].value" -type "string" "true"; + setAttr ".stringOptions[41].type" -type "string" "boolean"; + setAttr ".stringOptions[42].name" -type "string" "environment lighting mode"; + setAttr ".stringOptions[42].value" -type "string" "off"; + setAttr ".stringOptions[42].type" -type "string" "string"; + setAttr ".stringOptions[43].name" -type "string" "environment lighting quality"; + setAttr ".stringOptions[43].value" -type "string" "0.167"; + setAttr ".stringOptions[43].type" -type "string" "scalar"; + setAttr ".stringOptions[44].name" -type "string" "environment lighting shadow"; + setAttr ".stringOptions[44].value" -type "string" "transparent"; + setAttr ".stringOptions[44].type" -type "string" "string"; +createNode mentalrayFramebuffer -s -n "miDefaultFramebuffer"; +createNode lightLinker -s -n "lightLinker1"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode displayLayerManager -n "layerManager"; +createNode displayLayer -n "defaultLayer"; +createNode renderLayerManager -n "renderLayerManager"; +createNode renderLayer -n "defaultRenderLayer"; + setAttr ".g" yes; +createNode polyCube -n "polyCube1"; + setAttr ".cuv" 4; +createNode script -n "uiConfigurationScriptNode"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n" + + " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n" + + " -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n" + + " -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n" + + " -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n" + + " -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n" + + "\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n" + + " -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n" + + " -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n" + + " -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n" + + " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n" + + " -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n" + + " -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n" + + " -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n" + + " -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n" + + " -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n" + + " modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n" + + " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n" + + " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n" + + " -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n" + + " -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n" + + " -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n" + + " -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n" + + " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n" + + " -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n" + + " -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n" + + " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n" + + " -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n" + + " -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n" + + " -showUpstreamCurves 1\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n" + + " -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n" + + " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n" + + " -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n" + + " -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n" + + " -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n" + + "\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n" + + " -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n" + + " -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n" + + " -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n" + + " -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n" + + " -showConnectionToSelected 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n" + + " -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n" + + "\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -ignoreAssets 1\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -keyReleaseCommand \"nodeEdKeyReleaseCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -island 0\n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n" + + " -syncedSelection 1\n -extendToShapes 1\n $editorName;;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -ignoreAssets 1\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -keyReleaseCommand \"nodeEdKeyReleaseCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -island 0\n -showNamespace 1\n" + + " -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -syncedSelection 1\n -extendToShapes 1\n $editorName;;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Texture Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels `;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"blendShapePanel\" (localizedPanelLabel(\"Blend Shape\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tblendShapePanel -unParent -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n" + + "\t\tblendShapePanel -edit -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\tscriptedPanel -e -to $panelName;\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 1\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 8192\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -maxConstantTransparency 1\\n -rendererName \\\"base_OpenGL_Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 1\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 8192\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -maxConstantTransparency 1\\n -rendererName \\\"base_OpenGL_Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 "; + setAttr ".st" 6; +createNode animCurveTU -n "L_cube_visibility"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 1; + setAttr ".kot[0]" 5; +createNode animCurveTL -n "L_cube_translateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 5; +createNode animCurveTL -n "L_cube_translateY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 2.3775028017191246; +createNode animCurveTL -n "L_cube_translateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 0; +createNode animCurveTA -n "L_cube_rotateX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 0; +createNode animCurveTA -n "L_cube_rotateY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 0; +createNode animCurveTA -n "L_cube_rotateZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 0; +createNode animCurveTU -n "L_cube_scaleX"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 1; +createNode animCurveTU -n "L_cube_scaleY"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 1; +createNode animCurveTU -n "L_cube_scaleZ"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr ".ktv[0]" 3 1; +select -ne :time1; + setAttr -av -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".o" 12; + setAttr ".unw" 12; +select -ne :renderPartition; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".st"; + setAttr -k on ".an"; + setAttr -k on ".pt"; +select -ne :initialShadingGroup; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 4 ".dsm"; + setAttr -k on ".mwc"; + setAttr -k on ".an"; + setAttr -k on ".il"; + setAttr -k on ".vo"; + setAttr -k on ".eo"; + setAttr -k on ".fo"; + setAttr -k on ".epo"; + setAttr ".ro" yes; + setAttr -cb on ".mimt"; + setAttr -cb on ".miop"; + setAttr -cb on ".mise"; + setAttr -cb on ".mism"; + setAttr -cb on ".mice"; + setAttr -av -cb on ".micc"; + setAttr -cb on ".mica"; + setAttr -cb on ".micw"; + setAttr -cb on ".mirw"; +select -ne :initialParticleSE; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".mwc"; + setAttr -k on ".an"; + setAttr -k on ".il"; + setAttr -k on ".vo"; + setAttr -k on ".eo"; + setAttr -k on ".fo"; + setAttr -k on ".epo"; + setAttr ".ro" yes; + setAttr -cb on ".mimt"; + setAttr -cb on ".miop"; + setAttr -cb on ".mise"; + setAttr -cb on ".mism"; + setAttr -cb on ".mice"; + setAttr -av -cb on ".micc"; + setAttr -cb on ".mica"; + setAttr -av -cb on ".micw"; + setAttr -cb on ".mirw"; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; +select -ne :defaultResolution; + setAttr ".pa" 1; +select -ne :defaultLightSet; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -k on ".nds"; + setAttr -k on ".bnm"; + setAttr -k on ".mwc"; + setAttr -k on ".an"; + setAttr -k on ".il"; + setAttr -k on ".vo"; + setAttr -k on ".eo"; + setAttr -k on ".fo"; + setAttr -k on ".epo"; + setAttr -k on ".ro" yes; +select -ne :defaultObjectSet; + setAttr ".ro" yes; +select -ne :hardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; + setAttr -k off ".fbfm"; + setAttr -k off -cb on ".ehql"; + setAttr -k off -cb on ".eams"; + setAttr -k off -cb on ".eeaa"; + setAttr -k off -cb on ".engm"; + setAttr -k off -cb on ".mes"; + setAttr -k off -cb on ".emb"; + setAttr -av -k off -cb on ".mbbf"; + setAttr -k off -cb on ".mbs"; + setAttr -k off -cb on ".trm"; + setAttr -k off -cb on ".tshc"; + setAttr -k off ".enpt"; + setAttr -k off -cb on ".clmt"; + setAttr -k off -cb on ".tcov"; + setAttr -k off -cb on ".lith"; + setAttr -k off -cb on ".sobc"; + setAttr -k off -cb on ".cuth"; + setAttr -k off -cb on ".hgcd"; + setAttr -k off -cb on ".hgci"; + setAttr -k off -cb on ".mgcs"; + setAttr -k off -cb on ".twa"; + setAttr -k off -cb on ".twz"; + setAttr -k on ".hwcc"; + setAttr -k on ".hwdp"; + setAttr -k on ".hwql"; + setAttr -k on ".hwfr"; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 ; +select -ne :defaultHardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".rp"; + setAttr -k on ".cai"; + setAttr -k on ".coi"; + setAttr -cb on ".bc"; + setAttr -av -k on ".bcb"; + setAttr -av -k on ".bcg"; + setAttr -av -k on ".bcr"; + setAttr -k on ".ei"; + setAttr -k on ".ex"; + setAttr -av -k on ".es"; + setAttr -av -k on ".ef"; + setAttr -av -k on ".bf"; + setAttr -k on ".fii"; + setAttr -av -k on ".sf"; + setAttr -k on ".gr"; + setAttr -k on ".li"; + setAttr -k on ".ls"; + setAttr -k on ".mb"; + setAttr -k on ".ti"; + setAttr -k on ".txt"; + setAttr -k on ".mpr"; + setAttr -k on ".wzd"; + setAttr ".fn" -type "string" "im"; + setAttr -k on ".if"; + setAttr ".res" -type "string" "ntsc_4d 646 485 1.333"; + setAttr -k on ".as"; + setAttr -k on ".ds"; + setAttr -k on ".lm"; + setAttr -k on ".fir"; + setAttr -k on ".aap"; + setAttr -k on ".gh"; + setAttr -cb on ".sd"; +connectAttr "polyCube1.out" "cubeRShape.i"; +connectAttr "L_cube_visibility.o" "L_cube.v"; +connectAttr "L_cube_translateX.o" "L_cube.tx"; +connectAttr "L_cube_translateY.o" "L_cube.ty"; +connectAttr "L_cube_translateZ.o" "L_cube.tz"; +connectAttr "L_cube_rotateX.o" "L_cube.rx"; +connectAttr "L_cube_rotateY.o" "L_cube.ry"; +connectAttr "L_cube_rotateZ.o" "L_cube.rz"; +connectAttr "L_cube_scaleX.o" "L_cube.sx"; +connectAttr "L_cube_scaleY.o" "L_cube.sy"; +connectAttr "L_cube_scaleZ.o" "L_cube.sz"; +connectAttr ":mentalrayGlobals.msg" ":mentalrayItemsList.glb"; +connectAttr ":miDefaultOptions.msg" ":mentalrayItemsList.opt" -na; +connectAttr ":miDefaultFramebuffer.msg" ":mentalrayItemsList.fb" -na; +connectAttr ":miDefaultOptions.msg" ":mentalrayGlobals.opt"; +connectAttr ":miDefaultFramebuffer.msg" ":mentalrayGlobals.fb"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "cubeRShape.iog" ":initialShadingGroup.dsm" -na; +connectAttr "cubeLShape.iog" ":initialShadingGroup.dsm" -na; +connectAttr "R_cubeShape.iog" ":initialShadingGroup.dsm" -na; +connectAttr "L_cubeShape.iog" ":initialShadingGroup.dsm" -na; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +// End of test_mirror_tables.ma diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_non_unique_names.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_non_unique_names.ma new file mode 100644 index 0000000..00b814a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_non_unique_names.ma @@ -0,0 +1,797 @@ +//Maya ASCII 2017 scene +//Name: test_non_unique_names.ma +//Last modified: Sat, Feb 04, 2017 11:58:36 PM +//Codeset: 1252 +file -rdi 1 -ns "srcSphere" -rfn "srcSphereRN" -typ "mayaAscii" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -r -ns "srcSphere" -dr 1 -rfn "srcSphereRN" -typ "mayaAscii" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +requires maya "2017"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2017"; +fileInfo "version" "2017"; +fileInfo "cutIdentifier" "201606150345-997974"; +fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n"; +createNode transform -s -n "persp"; + rename -uid "DDAA8254-4753-78D5-6AAE-159C81EDC3F9"; + setAttr ".v" no; + setAttr ".t" -type "double3" -123.17900131274617 74.628663135067598 32.661032572240735 ; + setAttr ".r" -type "double3" -30.338352727390017 -72.599999999996271 0 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "27F094E9-49EE-F1D7-052F-24B6AD29870D"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 150.42418693917088; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + rename -uid "E6DDBE5E-414D-598C-1652-DDA9896B2C18"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 100.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "BA963D24-4FDB-8DA9-9320-68A3D19A3033"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; +createNode transform -s -n "front"; + rename -uid "56938C00-4FC9-9BB5-7BA8-22B2465F51AC"; + setAttr ".v" no; + setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "25B2B187-477B-D3AA-AC82-5C9C5B6BD4DA"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 61.766282942468983; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; +createNode transform -s -n "side"; + rename -uid "D0276B16-4FEE-5998-5D3D-E7AA9047C23C"; + setAttr ".v" no; + setAttr ".t" -type "double3" 100.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "52D7FE6B-4C52-8DC6-B4BD-73870EB09DB0"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; +createNode transform -n "group"; + rename -uid "E0D02B96-4B6D-0116-B834-3A8B17F2574B"; + addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message"; +createNode transform -n "offset" -p "group"; + rename -uid "53E00748-4BAE-DC3E-72DA-C39AC1FABCA1"; + setAttr -l on ".v"; + setAttr -l on ".tx"; + setAttr -l on ".ty"; + setAttr -l on ".tz"; + setAttr -l on ".rx"; + setAttr -l on ".ry"; + setAttr -l on ".rz"; + setAttr -l on ".sx"; + setAttr -l on ".sy"; + setAttr -l on ".sz"; +createNode transform -n "lockedNode" -p "|group|offset"; + rename -uid "C77C5FBF-4DA8-7E08-F3BE-AC9D0D00D0FC"; +createNode transform -n "sphere" -p "|group|offset|lockedNode"; + rename -uid "8066C85B-4E94-344B-173A-698197FBAF5E"; + addAttr -ci true -sn "testVector" -ln "testVector" -at "double3" -nc 3; + addAttr -ci true -sn "testVectorX" -ln "testVectorX" -at "double" -p "testVector"; + addAttr -ci true -sn "testVectorY" -ln "testVectorY" -at "double" -p "testVector"; + addAttr -ci true -sn "testVectorZ" -ln "testVectorZ" -at "double" -p "testVector"; + addAttr -ci true -uac -sn "testColor" -ln "testColor" -at "float3" -nc 3; + addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor"; + addAttr -ci true -sn "testGreen" -ln "testGreen" -at "float" -p "testColor"; + addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor"; + addAttr -ci true -sn "testString" -ln "testString" -dt "string"; + addAttr -ci true -sn "testEnum" -ln "testEnum" -min 0 -max 2 -en "Apple:Lemon:Banana" + -at "enum"; + addAttr -ci true -sn "testFloat" -ln "testFloat" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testBoolean" -ln "testBoolean" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "testInteger" -ln "testInteger" -min 0 -max 10 -at "long"; + addAttr -ci true -sn "testLocked" -ln "testLocked" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testHidden" -ln "testHidden" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testConnect" -ln "testConnect" -at "double"; + addAttr -ci true -sn "testAnimated" -ln "testAnimated" -at "double"; + addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message"; + addAttr -ci true -sn "testLimit" -ln "testLimit" -min -10 -max 10 -at "double"; + addAttr -ci true -sn "testNonKeyable" -ln "testNonKeyable" -at "double"; + setAttr -k on ".testVector"; + setAttr -k on ".testVectorX"; + setAttr -k on ".testVectorY"; + setAttr -k on ".testVectorZ"; + setAttr -k on ".testString"; + setAttr -k on ".testEnum" 2; + setAttr -k on ".testFloat"; + setAttr -k on ".testBoolean"; + setAttr -k on ".testInteger"; + setAttr -l on -k on ".testLocked"; + setAttr -k on ".testConnect"; + setAttr -k on ".testAnimated"; + setAttr -k on ".testLimit"; + setAttr -cb on ".testNonKeyable"; +createNode mesh -n "sphereShape" -p "|group|offset|lockedNode|sphere"; + rename -uid "31DEDCCA-419C-842A-2745-C2BADE15FAD3"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".ugsdt" no; + setAttr ".vnm" 0; +createNode transform -n "group1"; + rename -uid "3BD55A1F-4D3B-0600-E76E-A3B8DDB90A9E"; + addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message"; +createNode transform -n "offset" -p "group1"; + rename -uid "DB0A4EF6-440F-3E67-85E1-F6A0FC8B3359"; + setAttr -l on ".v"; + setAttr -l on ".tx"; + setAttr -l on ".ty"; + setAttr -l on ".tz"; + setAttr -l on ".rx"; + setAttr -l on ".ry"; + setAttr -l on ".rz"; + setAttr -l on ".sx"; + setAttr -l on ".sy"; + setAttr -l on ".sz"; +createNode transform -n "lockedNode" -p "|group1|offset"; + rename -uid "425F552C-4C6B-094E-065C-43BF75DE749F"; +createNode transform -n "sphere" -p "|group1|offset|lockedNode"; + rename -uid "D9F1C1EE-4A3B-CC6C-E2F6-D0AD5B44CB13"; + addAttr -ci true -sn "testVector" -ln "testVector" -at "double3" -nc 3; + addAttr -ci true -sn "testVectorX" -ln "testVectorX" -at "double" -p "testVector"; + addAttr -ci true -sn "testVectorY" -ln "testVectorY" -at "double" -p "testVector"; + addAttr -ci true -sn "testVectorZ" -ln "testVectorZ" -at "double" -p "testVector"; + addAttr -ci true -uac -sn "testColor" -ln "testColor" -at "float3" -nc 3; + addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor"; + addAttr -ci true -sn "testGreen" -ln "testGreen" -at "float" -p "testColor"; + addAttr -ci true -sn "testRed" -ln "testRed" -at "float" -p "testColor"; + addAttr -ci true -sn "testString" -ln "testString" -dt "string"; + addAttr -ci true -sn "testEnum" -ln "testEnum" -min 0 -max 2 -en "Apple:Lemon:Banana" + -at "enum"; + addAttr -ci true -sn "testFloat" -ln "testFloat" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testBoolean" -ln "testBoolean" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "testInteger" -ln "testInteger" -min 0 -max 10 -at "long"; + addAttr -ci true -sn "testLocked" -ln "testLocked" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testHidden" -ln "testHidden" -min 0 -max 10 -at "double"; + addAttr -ci true -sn "testConnect" -ln "testConnect" -at "double"; + addAttr -ci true -sn "testAnimated" -ln "testAnimated" -at "double"; + addAttr -s false -ci true -sn "testMessage" -ln "testMessage" -at "message"; + setAttr -k on ".testVector"; + setAttr -k on ".testVectorX"; + setAttr -k on ".testVectorY"; + setAttr -k on ".testVectorZ"; + setAttr -k on ".testString"; + setAttr -k on ".testEnum" 2; + setAttr -k on ".testFloat"; + setAttr -k on ".testBoolean"; + setAttr -k on ".testInteger"; + setAttr -l on -k on ".testLocked"; + setAttr -k on ".testConnect"; + setAttr -k on ".testAnimated"; +createNode mesh -n "sphereShape" -p "|group1|offset|lockedNode|sphere"; + rename -uid "4D2BA5B2-42B9-056B-13C8-D285A9FBD044"; + setAttr -k off ".v"; + setAttr ".vir" yes; + setAttr ".vif" yes; + setAttr ".uvst[0].uvsn" -type "string" "map1"; + setAttr ".cuvs" -type "string" "map1"; + setAttr ".dcc" -type "string" "Ambient+Diffuse"; + setAttr ".covm[0]" 0 1 1; + setAttr ".cdvm[0]" 0 1 1; + setAttr ".ugsdt" no; + setAttr ".vnm" 0; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "548C9C33-497A-C6D1-8D06-98B89D3D62D8"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode displayLayerManager -n "layerManager"; + rename -uid "82379A41-4D50-EE15-B9ED-688E288FD51B"; +createNode displayLayer -n "defaultLayer"; + rename -uid "3283B76B-49A2-D9EB-14C2-4C827D163B8F"; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "72986805-4CFF-9FD5-4A52-5F9D8DBB9B59"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "F62FFC33-4D56-2BEB-B85F-A6A272377F4C"; + setAttr ".g" yes; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "7FD6986F-4794-3763-3E36-59852AA535BF"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 "; + setAttr ".st" 6; +createNode reference -n "srcSphereRN"; + rename -uid "236A7996-4E4A-8901-858E-DDBE7FC55F9A"; + setAttr -s 16 ".phl"; + setAttr ".phl[1]" 0; + setAttr ".phl[2]" 0; + setAttr ".phl[3]" 0; + setAttr ".phl[4]" 0; + setAttr ".phl[5]" 0; + setAttr ".phl[6]" 0; + setAttr ".phl[7]" 0; + setAttr ".phl[8]" 0; + setAttr ".phl[9]" 0; + setAttr ".phl[10]" 0; + setAttr ".phl[11]" 0; + setAttr ".phl[12]" 0; + setAttr ".phl[13]" 0; + setAttr ".phl[14]" 0; + setAttr ".phl[15]" 0; + setAttr ".phl[16]" 0; + setAttr ".ed" -type "dataReferenceEdits" + "srcSphereRN" + "srcSphereRN" 0 + "srcSphereRN" 43 + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "visibility" " 1" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translate" " -type \"double3\" 0 5 0" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateX" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateY" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "translateZ" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotate" " -type \"double3\" 0 0 0" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateX" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateY" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "rotateZ" " -av" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode" "scale" " -type \"double3\" 1 1 1" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "translate" " -type \"double3\" 0 8 -12" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "translateZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotate" " -type \"double3\" 45 50 90" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateX" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateY" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "rotateZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scale" " -type \"double3\" 0.25 4.66 0.5" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleX" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleY" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "scaleZ" " -av" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVector" " -k 1 -type \"double3\" 0.2 1.4 2.6" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVector" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorX" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorY" " -av -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testVectorZ" " -k 1" + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testColor" " -type \"float3\" 0.18000000999999999 0.60000001999999997 0.18000000999999999" + + 2 "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere" + "testString" " -k 1 -type \"string\" \"Hello world\"" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode.translateZ" + "srcSphereRN.placeHolderList[1]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorX" + "srcSphereRN.placeHolderList[2]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorY" + "srcSphereRN.placeHolderList[3]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testVectorZ" + "srcSphereRN.placeHolderList[4]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testEnum" + "srcSphereRN.placeHolderList[5]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testFloat" + "srcSphereRN.placeHolderList[6]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testBoolean" + "srcSphereRN.placeHolderList[7]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.testInteger" + "srcSphereRN.placeHolderList[8]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateY" + "srcSphereRN.placeHolderList[9]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateX" + "srcSphereRN.placeHolderList[10]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.translateZ" + "srcSphereRN.placeHolderList[11]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateX" + "srcSphereRN.placeHolderList[12]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.rotateZ" + "srcSphereRN.placeHolderList[13]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleX" + "srcSphereRN.placeHolderList[14]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.scaleZ" + "srcSphereRN.placeHolderList[15]" "" + 5 4 "srcSphereRN" "|srcSphere:group|srcSphere:offset|srcSphere:lockedNode|srcSphere:sphere.visibility" + "srcSphereRN.placeHolderList[16]" ""; + setAttr ".ptag" -type "string" ""; +lockNode -l 1 ; +createNode animCurveTU -n "srcSphere:sphere_visibility"; + rename -uid "25B7A44D-46CB-EE48-EBD0-1E9ADC4681DE"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "srcSphere:sphere_translateX"; + rename -uid "D13498C8-4E35-AB33-9DA8-D0B1AB09A06C"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; +createNode animCurveTL -n "srcSphere:sphere_translateY"; + rename -uid "30A68F0C-473D-C3BD-68EE-1A97C506CB8A"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; +createNode animCurveTL -n "srcSphere:sphere_translateZ"; + rename -uid "591EE7E4-471A-2A88-0F1D-48A0CA2F575E"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; +createNode animCurveTA -n "srcSphere:sphere_rotateX"; + rename -uid "7DAF1ACE-4BF1-C12E-BD6B-A5A56B35773F"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; +createNode animCurveTA -n "srcSphere:sphere_rotateZ"; + rename -uid "86BF49D8-4C94-99EC-28F6-2EA727F428F4"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; +createNode animCurveTU -n "srcSphere:sphere_scaleX"; + rename -uid "9C679B5C-4862-3674-978A-D484AEE966E3"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; +createNode animCurveTU -n "srcSphere:sphere_scaleZ"; + rename -uid "F8AEC957-4DD2-855F-9D56-69B153BA1F5C"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; +createNode animCurveTU -n "srcSphere:sphere_testVectorX"; + rename -uid "D3E850E5-45D3-3797-2452-828BC0F88BF5"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; +createNode animCurveTU -n "srcSphere:sphere_testVectorY"; + rename -uid "411854EA-4881-2F52-8A0C-DCB3502416B8"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; +createNode animCurveTU -n "srcSphere:sphere_testVectorZ"; + rename -uid "502BF718-4050-BBE2-991E-77BE7C123CAA"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; +createNode animCurveTU -n "srcSphere:sphere_testEnum"; + rename -uid "8CF62262-46FF-9062-6DED-C4AA2B2CCE2E"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "srcSphere:sphere_testFloat"; + rename -uid "498C6886-4FDB-563B-723A-A8A9474E9570"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; +createNode animCurveTU -n "srcSphere:sphere_testBoolean"; + rename -uid "143ED449-4120-35D8-6BC9-A98C802C5CA3"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "srcSphere:sphere_testInteger"; + rename -uid "E96551ED-459B-4C0A-CDDA-44A263050285"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; +createNode animCurveTL -n "dstSphere:sphere_translateY"; + rename -uid "20E5403E-4B3D-0674-161A-91A6924D0559"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 8 10 8; +createNode animCurveTL -n "lockedNode_translateZ"; + rename -uid "B63F154D-4C27-9666-D375-138ED9037730"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 15; +createNode animCurveTU -n "sphere_testInteger"; + rename -uid "97499943-4659-497E-3F90-61B92034A6C4"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 5 10 5; +createNode animCurveTU -n "sphere_testEnum"; + rename -uid "B071F69A-4FC0-DA63-9FFE-4A94AA5979B4"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "sphere_translateX"; + rename -uid "0768FFC8-4267-269E-B230-439D662AADFE"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 0; +createNode animCurveTL -n "sphere_translateZ"; + rename -uid "4C1A73F4-461D-F4BA-D731-D4B281F14C48"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 -12 10 11.214436147065292; +createNode animCurveTU -n "sphere_testFloat"; + rename -uid "4CE18D96-4C85-2A00-A762-A7A94AE1606A"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.666 10 0.666; +createNode animCurveTU -n "sphere_scaleX"; + rename -uid "866CDCF6-4F4D-103D-63EC-729E61A6D480"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.25 10 0.42958527814637792; +createNode animCurveTU -n "sphere_testVectorZ"; + rename -uid "AEBEFB59-4872-F7FD-CADC-EAA305119536"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 2.6 10 2.6; +createNode animCurveTU -n "sphere_scaleZ"; + rename -uid "EFB25E16-44ED-32F9-943A-ED8A845F4D39"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.5 10 0.85917055629275585; +createNode animCurveTA -n "sphere_rotateX"; + rename -uid "19C44183-45EF-1073-AE60-D0AC778E182D"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 45 10 30.81018202226841; +createNode animCurveTU -n "sphere_testVectorY"; + rename -uid "B55F1B53-48D5-A874-A1E0-C0B71E545F06"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.4 10 1.4; +createNode animCurveTA -n "sphere_rotateZ"; + rename -uid "07252CD5-4363-F661-068A-66B3EF78D16A"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 90 10 149.70880463068096; +createNode animCurveTU -n "sphere_visibility"; + rename -uid "F78C1BCC-435D-D057-01ED-D1B15A6BE60B"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTU -n "sphere_testVectorX"; + rename -uid "9FAF8611-4755-AE77-1A60-4FA5FF5469C7"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0.2 10 0.2; +createNode animCurveTU -n "sphere_testBoolean"; + rename -uid "55CCB691-471C-1916-5F57-D78DFC7CE524"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 10 1; + setAttr -s 2 ".kot[0:1]" 5 5; +createNode animCurveTL -n "lockedNode_translateZ1"; + rename -uid "12CDCBC7-41D0-13DA-F2E6-04B9FC31CE19"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 15; +createNode renderLayerManager -n "dstSphere:renderLayerManager"; + rename -uid "88F08ACE-4F04-45CD-ED01-1DAC296CF287"; +createNode renderLayer -n "dstSphere:defaultRenderLayer"; + rename -uid "97E29F6D-495A-42D8-7A95-BDADCBE099F0"; + setAttr ".g" yes; +createNode animCurveTU -n "sphere_testAnimated"; + rename -uid "A38AFFD7-4BB6-7949-58F0-1DA330C26C51"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 10; +createNode polySphere -n "srcPolySphere"; + rename -uid "9DC42CA0-4D9A-CAA0-B1D3-56A34DA33DDA"; + setAttr ".r" 4.1417806816985845; +createNode animCurveTU -n "sphere_testAnimated1"; + rename -uid "4785293F-43CF-7E0E-6273-0A9CE9B8C052"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 0 10 10; +createNode polySphere -n "srcPolySphere1"; + rename -uid "22D3CF49-4D45-E0C1-99E9-98949F65BC37"; + setAttr ".r" 4.1417806816985845; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "4E61DE05-49DE-4ABA-D703-36AE442A88AD"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "A2E4EC6B-4BE3-25B3-9E39-BCB3468204D9"; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "5DFFAA9C-4881-F956-58D0-CE9DBC5970AC"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n" + + " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n" + + " -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n" + + " -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n" + + " -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n" + + " -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n" + + " -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n" + + " modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n" + + " -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n" + + " -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n" + + " -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n" + + " -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n" + + " -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n" + + " -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n" + + "\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n" + + " -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n" + + " -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n" + + " -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n" + + " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n" + + " -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n" + + " -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n" + + " -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n" + + " -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n" + + " -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 2058\n -height 1022\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n" + + "\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n" + + " -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n" + + " -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 2058\n -height 1022\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n" + + " -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n" + + " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n" + + " -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n" + + " -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n" + + " -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n" + + " -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n" + + "\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n" + + " -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n" + + " -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n" + + " -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 1\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 0.96\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n" + + " -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n" + + " -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n" + + " -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 1\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 0.96\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n" + + " -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n" + + " -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n" + + " -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n" + + " -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n" + + " -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n" + + " -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n" + + " -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"timeEditorPanel\" -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n" + + "\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n" + + " -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n" + + "\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n" + + " hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n" + + " -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n" + + " -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tshapePanel -unParent -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tposePanel -unParent -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels ;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"profilerPanel\" -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"contentBrowserPanel\" -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels `;\n" + + "\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"Stereo\" -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels `;\nstring $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n" + + " -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n" + + " -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n" + + " -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\nstring $editorName = ($panelName+\"Editor\");\n" + + " stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 16384\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n" + + " -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n" + + " -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n" + + " -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n" + + " -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n" + + " -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n" + + " -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\toutlinerPanel -e -to $panelName;\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n" + + " -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n" + + " -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n" + + " if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 2058\\n -height 1022\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 16384\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 2058\\n -height 1022\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +select -ne :time1; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".o" 1; + setAttr -k on ".unw" 1; + setAttr -k on ".etw"; + setAttr -k on ".tps"; + setAttr -k on ".tms"; +lockNode -l 1 ; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 ; +select -ne :renderPartition; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".st"; + setAttr -cb on ".an"; + setAttr -cb on ".pt"; +lockNode -l 1 ; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 4 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 3 ".r"; +select -ne :initialShadingGroup; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 3 ".dsm"; + setAttr -k on ".mwc"; + setAttr -cb on ".an"; + setAttr -cb on ".il"; + setAttr -cb on ".vo"; + setAttr -cb on ".eo"; + setAttr -cb on ".fo"; + setAttr -cb on ".epo"; + setAttr -k on ".ro" yes; +lockNode -l 1 ; +select -ne :initialParticleSE; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".mwc"; + setAttr -cb on ".an"; + setAttr -cb on ".il"; + setAttr -cb on ".vo"; + setAttr -cb on ".eo"; + setAttr -cb on ".fo"; + setAttr -cb on ".epo"; + setAttr -k on ".ro" yes; +select -ne :defaultRenderGlobals; + setAttr ".ep" 1; +select -ne :defaultResolution; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -av ".w" 640; + setAttr -av ".h" 480; + setAttr -k on ".pa" 1; + setAttr -k on ".al"; + setAttr -av ".dar" 1.3333332538604736; + setAttr -k on ".ldar"; + setAttr -k on ".off"; + setAttr -k on ".fld"; + setAttr -k on ".zsl"; +select -ne :defaultLightSet; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -k on ".bnm"; + setAttr -k on ".mwc"; + setAttr -k on ".an"; + setAttr -k on ".il"; + setAttr -k on ".vo"; + setAttr -k on ".eo"; + setAttr -k on ".fo"; + setAttr -k on ".epo"; + setAttr -k on ".ro" yes; +select -ne :defaultObjectSet; + setAttr ".ro" yes; +lockNode -l 1 ; +select -ne :defaultColorMgtGlobals; + setAttr ".cme" no; +select -ne :hardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; + setAttr -k off ".fbfm"; + setAttr -k off -cb on ".ehql"; + setAttr -k off -cb on ".eams"; + setAttr -k off -cb on ".eeaa"; + setAttr -k off -cb on ".engm"; + setAttr -k off -cb on ".mes"; + setAttr -k off -cb on ".emb"; + setAttr -av -k off -cb on ".mbbf"; + setAttr -k off -cb on ".mbs"; + setAttr -k off -cb on ".trm"; + setAttr -k off -cb on ".tshc"; + setAttr -k off ".enpt"; + setAttr -k off -cb on ".clmt"; + setAttr -k off -cb on ".tcov"; + setAttr -k off -cb on ".lith"; + setAttr -k off -cb on ".sobc"; + setAttr -k off -cb on ".cuth"; + setAttr -k off -cb on ".hgcd"; + setAttr -k off -cb on ".hgci"; + setAttr -k off -cb on ".mgcs"; + setAttr -k off -cb on ".twa"; + setAttr -k off -cb on ".twz"; + setAttr -k on ".hwcc"; + setAttr -k on ".hwdp"; + setAttr -k on ".hwql"; + setAttr -k on ".hwfr"; +select -ne :ikSystem; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -k on ".nds"; + setAttr -k on ".bnm"; + setAttr -av ".gsn"; + setAttr -k on ".gsv"; + setAttr -s 4 ".sol"; +connectAttr "lockedNode_translateZ.o" "srcSphereRN.phl[1]"; +connectAttr "srcSphere:sphere_testVectorX.o" "srcSphereRN.phl[2]"; +connectAttr "srcSphere:sphere_testVectorY.o" "srcSphereRN.phl[3]"; +connectAttr "srcSphere:sphere_testVectorZ.o" "srcSphereRN.phl[4]"; +connectAttr "srcSphere:sphere_testEnum.o" "srcSphereRN.phl[5]"; +connectAttr "srcSphere:sphere_testFloat.o" "srcSphereRN.phl[6]"; +connectAttr "srcSphere:sphere_testBoolean.o" "srcSphereRN.phl[7]"; +connectAttr "srcSphere:sphere_testInteger.o" "srcSphereRN.phl[8]"; +connectAttr "srcSphere:sphere_translateY.o" "srcSphereRN.phl[9]"; +connectAttr "srcSphere:sphere_translateX.o" "srcSphereRN.phl[10]"; +connectAttr "srcSphere:sphere_translateZ.o" "srcSphereRN.phl[11]"; +connectAttr "srcSphere:sphere_rotateX.o" "srcSphereRN.phl[12]"; +connectAttr "srcSphere:sphere_rotateZ.o" "srcSphereRN.phl[13]"; +connectAttr "srcSphere:sphere_scaleX.o" "srcSphereRN.phl[14]"; +connectAttr "srcSphere:sphere_scaleZ.o" "srcSphereRN.phl[15]"; +connectAttr "srcSphere:sphere_visibility.o" "srcSphereRN.phl[16]"; +connectAttr "|group|offset|lockedNode|sphere.msg" "group.testMessage" -l on; +connectAttr "|group|offset|lockedNode|sphere.ty" "|group|offset|lockedNode|sphere.testConnect" + ; +connectAttr "sphere_testAnimated.o" "|group|offset|lockedNode|sphere.testAnimated" + ; +connectAttr "group.msg" "|group|offset|lockedNode|sphere.testMessage" -l on; +connectAttr "srcPolySphere.out" "|group|offset|lockedNode|sphere|sphereShape.i"; +connectAttr "|group1|offset|lockedNode|sphere.msg" "group1.testMessage" -l on; +connectAttr "|group1|offset|lockedNode|sphere.ty" "|group1|offset|lockedNode|sphere.testConnect" + ; +connectAttr "sphere_testAnimated1.o" "|group1|offset|lockedNode|sphere.testAnimated" + ; +connectAttr "group1.msg" "|group1|offset|lockedNode|sphere.testMessage" -l on; +connectAttr "srcPolySphere1.out" "|group1|offset|lockedNode|sphere|sphereShape.i" + ; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "dstSphere:renderLayerManager.rlmi[0]" "dstSphere:defaultRenderLayer.rlid" + ; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "dstSphere:defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "|group|offset|lockedNode|sphere|sphereShape.iog" ":initialShadingGroup.dsm" + -na; +connectAttr "|group1|offset|lockedNode|sphere|sphereShape.iog" ":initialShadingGroup.dsm" + -na; +// End of test_non_unique_names.ma diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_non_unique_names.pose b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_non_unique_names.pose new file mode 100644 index 0000000..25f0497 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_non_unique_names.pose @@ -0,0 +1,151 @@ +{ + "metadata": { + "mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_non_unique_names.ma", + "version": "1.0.0", + "user": "Hovel", + "mayaVersion": "2017", + "ctime": "1518341544" + } +, + "objects": { + "srcSphere:offset": { + "attrs": {} + }, + "srcSphere:sphere": { + "attrs": { + "testInteger": { + "type": "long", + "value": 5 + }, + "testProxy": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 4.66 + }, + "testLimit": { + "type": "double", + "value": 10.0 + }, + "testConnect": { + "type": "double", + "value": 8.0 + }, + "testEnum": { + "type": "enum", + "value": 1 + }, + "scaleX": { + "type": "double", + "value": 0.25 + }, + "testString": { + "type": "string", + "value": "Hello world" + }, + "scaleZ": { + "type": "double", + "value": 0.5 + }, + "rotateX": { + "type": "doubleAngle", + "value": 45.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 50.0 + }, + "rotateZ": { + "type": "doubleAngle", + "value": 90.0 + }, + "translateX": { + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "type": "doubleLinear", + "value": 8.0 + }, + "translateZ": { + "type": "doubleLinear", + "value": -12.0 + }, + "visibility": { + "type": "bool", + "value": true + }, + "testFloat": { + "type": "double", + "value": 0.666 + }, + "testAnimated": { + "type": "double", + "value": 0.0 + }, + "testVectorX": { + "type": "double", + "value": 0.2 + }, + "testVectorY": { + "type": "double", + "value": 1.4 + }, + "testVectorZ": { + "type": "double", + "value": 2.6 + }, + "testBoolean": { + "type": "bool", + "value": true + } + } + }, + "srcSphere:lockedNode": { + "attrs": { + "translateX": { + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "type": "doubleLinear", + "value": 5.0 + }, + "translateZ": { + "type": "doubleLinear", + "value": 0.0 + }, + "scaleX": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 1.0 + }, + "visibility": { + "type": "bool", + "value": true + }, + "rotateX": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateZ": { + "type": "doubleAngle", + "value": 0.0 + }, + "scaleZ": { + "type": "double", + "value": 1.0 + } + } + } + } +} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/.studioLibrary/record.dict b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/.studioLibrary/record.dict new file mode 100644 index 0000000..34de2a7 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/.studioLibrary/record.dict @@ -0,0 +1 @@ +{'end': 24, 'description': 'eded', 'scene': '', 'start': 1, 'mtime': '1391012417', 'owner': 'tlhomme', 'ctime': '1391012417'} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/animation.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/animation.ma new file mode 100644 index 0000000..85956c0 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/animation.ma @@ -0,0 +1,7123 @@ +//Maya ASCII 2013 scene +//Name: animation.ma +//Last modified: Thu, Feb 07, 2013 04:40:04 PM +//Codeset: 1252 +requires maya "2013"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2013"; +fileInfo "version" "2013 x64"; +fileInfo "cutIdentifier" "201202220241-825136"; +fileInfo "osv" "Microsoft Windows 7 Ultimate Edition, 64-bit Windows 7 Service Pack 1 (Build 7601)\n"; +createNode animCurveTL -n "DELETE_NODE_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.translateX"; +createNode animCurveTL -n "DELETE_NODE_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.translateY"; +createNode animCurveTL -n "DELETE_NODE_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE1_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.translateX"; +createNode animCurveTL -n "DELETE_NODE1_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.translateY"; +createNode animCurveTL -n "DELETE_NODE1_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE1_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE1_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE1_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE1_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE1_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE1_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf.rotateZ"; +createNode animCurveTU -n "DELETE_NODE2_jawStretch"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.jawStretch"; +createNode animCurveTL -n "DELETE_NODE2_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.translateX"; +createNode animCurveTL -n "DELETE_NODE2_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0.0033959318634735991 10 0.0033959318634735991; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.translateY"; +createNode animCurveTL -n "DELETE_NODE2_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0.037225733300033453 10 0.037225733300033453; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.translateZ"; +createNode animCurveTU -n "DELETE_NODE2_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.scaleX"; +createNode animCurveTU -n "DELETE_NODE2_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.scaleY"; +createNode animCurveTU -n "DELETE_NODE2_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.scaleZ"; +createNode animCurveTU -n "DELETE_NODE2_lipsSeal"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.lipsSeal"; +createNode animCurveTA -n "DELETE_NODE2_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 38.044336921645353 6 -5.2124021846970194 + 10 -5.2124021846970194; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.rotateX"; +createNode animCurveTA -n "DELETE_NODE2_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -3.4001631649756883 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.rotateY"; +createNode animCurveTA -n "DELETE_NODE2_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 4.3342393392160101 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.rotateZ"; +createNode animCurveTU -n "DELETE_NODE2_lipSealHeight"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw.lipSealHeight"; +createNode animCurveTL -n "DELETE_NODE3_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.translateX"; +createNode animCurveTL -n "DELETE_NODE3_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.translateY"; +createNode animCurveTL -n "DELETE_NODE3_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.translateZ"; +createNode animCurveTU -n "DELETE_NODE3_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.scaleX"; +createNode animCurveTU -n "DELETE_NODE3_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.scaleY"; +createNode animCurveTU -n "DELETE_NODE3_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE3_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.rotateX"; +createNode animCurveTA -n "DELETE_NODE3_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.rotateY"; +createNode animCurveTA -n "DELETE_NODE3_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE4_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.translateX"); +createNode animCurveTL -n "DELETE_NODE4_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.translateY"); +createNode animCurveTL -n "DELETE_NODE4_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.translateZ"); +createNode animCurveTU -n "DELETE_NODE4_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.scaleX"); +createNode animCurveTU -n "DELETE_NODE4_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.scaleY"); +createNode animCurveTU -n "DELETE_NODE4_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.scaleZ"); +createNode animCurveTA -n "DELETE_NODE4_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.rotateX"); +createNode animCurveTA -n "DELETE_NODE4_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.rotateY"); +createNode animCurveTA -n "DELETE_NODE4_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5.rotateZ"); +createNode animCurveTL -n "DELETE_NODE5_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.translateX"); +createNode animCurveTL -n "DELETE_NODE5_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.translateY"); +createNode animCurveTL -n "DELETE_NODE5_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.translateZ"); +createNode animCurveTU -n "DELETE_NODE5_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.scaleX"); +createNode animCurveTU -n "DELETE_NODE5_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.scaleY"); +createNode animCurveTU -n "DELETE_NODE5_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.scaleZ"); +createNode animCurveTA -n "DELETE_NODE5_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.rotateX"); +createNode animCurveTA -n "DELETE_NODE5_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.rotateY"); +createNode animCurveTA -n "DELETE_NODE5_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" ( + "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4.rotateZ"); +createNode animCurveTL -n "DELETE_NODE6_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.translateX"; +createNode animCurveTL -n "DELETE_NODE6_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.translateY"; +createNode animCurveTL -n "DELETE_NODE6_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.translateZ"; +createNode animCurveTU -n "DELETE_NODE6_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.scaleX"; +createNode animCurveTU -n "DELETE_NODE6_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.scaleY"; +createNode animCurveTU -n "DELETE_NODE6_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.scaleZ"; +createNode animCurveTA -n "DELETE_NODE6_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.rotateX"; +createNode animCurveTA -n "DELETE_NODE6_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.rotateY"; +createNode animCurveTA -n "DELETE_NODE6_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3.rotateZ"; +createNode animCurveTL -n "DELETE_NODE7_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.translateX"; +createNode animCurveTL -n "DELETE_NODE7_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0.109769011920731 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.translateY"; +createNode animCurveTL -n "DELETE_NODE7_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.translateZ"; +createNode animCurveTU -n "DELETE_NODE7_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.scaleX"; +createNode animCurveTU -n "DELETE_NODE7_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.scaleY"; +createNode animCurveTU -n "DELETE_NODE7_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.scaleZ"; +createNode animCurveTA -n "DELETE_NODE7_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.rotateX"; +createNode animCurveTA -n "DELETE_NODE7_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.rotateY"; +createNode animCurveTA -n "DELETE_NODE7_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2.rotateZ"; +createNode animCurveTL -n "DELETE_NODE8_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.translateX"; +createNode animCurveTL -n "DELETE_NODE8_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.translateY"; +createNode animCurveTL -n "DELETE_NODE8_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.translateZ"; +createNode animCurveTU -n "DELETE_NODE8_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.scaleX"; +createNode animCurveTU -n "DELETE_NODE8_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.scaleY"; +createNode animCurveTU -n "DELETE_NODE8_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.scaleZ"; +createNode animCurveTA -n "DELETE_NODE8_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.rotateX"; +createNode animCurveTA -n "DELETE_NODE8_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.rotateY"; +createNode animCurveTA -n "DELETE_NODE8_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1.rotateZ"; +createNode animCurveTL -n "DELETE_NODE9_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.translateX"; +createNode animCurveTL -n "DELETE_NODE9_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.translateY"; +createNode animCurveTL -n "DELETE_NODE9_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.translateZ"; +createNode animCurveTU -n "DELETE_NODE9_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.scaleX"; +createNode animCurveTU -n "DELETE_NODE9_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.scaleY"; +createNode animCurveTU -n "DELETE_NODE9_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE9_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.rotateX"; +createNode animCurveTA -n "DELETE_NODE9_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.rotateY"; +createNode animCurveTA -n "DELETE_NODE9_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE10_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE10_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE10_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE10_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE10_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE10_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE10_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE10_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE10_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE11_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE11_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE11_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE11_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE11_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE11_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE11_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE11_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE11_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE12_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE12_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE12_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE12_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE12_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE12_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE12_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE12_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE12_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE13_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE13_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE13_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE13_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE13_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE13_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE13_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE13_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE13_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE14_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.translateX"; +createNode animCurveTL -n "DELETE_NODE14_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.translateY"; +createNode animCurveTL -n "DELETE_NODE14_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.translateZ"; +createNode animCurveTU -n "DELETE_NODE14_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.scaleX"; +createNode animCurveTU -n "DELETE_NODE14_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.scaleY"; +createNode animCurveTU -n "DELETE_NODE14_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE14_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.rotateX"; +createNode animCurveTA -n "DELETE_NODE14_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.rotateY"; +createNode animCurveTA -n "DELETE_NODE14_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE15_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE15_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE15_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE15_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE15_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE15_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE15_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE15_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE15_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE16_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE16_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE16_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE16_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE16_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE16_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE16_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE16_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE16_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE17_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE17_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE17_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE17_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE17_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE17_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE17_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE17_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE17_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE18_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE18_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE18_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE18_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE18_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE18_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE18_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE18_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE18_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE19_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE19_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE19_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE19_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE19_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE19_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE19_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE19_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE19_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE20_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE20_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE20_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE20_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE20_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE20_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE20_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE20_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE20_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE21_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.translateX"; +createNode animCurveTL -n "DELETE_NODE21_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.translateY"; +createNode animCurveTL -n "DELETE_NODE21_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.translateZ"; +createNode animCurveTU -n "DELETE_NODE21_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.scaleX"; +createNode animCurveTU -n "DELETE_NODE21_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.scaleY"; +createNode animCurveTU -n "DELETE_NODE21_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE21_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.rotateX"; +createNode animCurveTA -n "DELETE_NODE21_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.rotateY"; +createNode animCurveTA -n "DELETE_NODE21_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE22_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.translateX"; +createNode animCurveTL -n "DELETE_NODE22_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.translateY"; +createNode animCurveTL -n "DELETE_NODE22_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.translateZ"; +createNode animCurveTU -n "DELETE_NODE22_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.scaleX"; +createNode animCurveTU -n "DELETE_NODE22_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.scaleY"; +createNode animCurveTU -n "DELETE_NODE22_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.scaleZ"; +createNode animCurveTA -n "DELETE_NODE22_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.rotateX"; +createNode animCurveTA -n "DELETE_NODE22_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.rotateY"; +createNode animCurveTA -n "DELETE_NODE22_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot.rotateZ"; +createNode animCurveTL -n "DELETE_NODE23_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.translateX"; +createNode animCurveTL -n "DELETE_NODE23_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.translateY"; +createNode animCurveTL -n "DELETE_NODE23_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.translateZ"; +createNode animCurveTU -n "DELETE_NODE23_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.scaleX"; +createNode animCurveTU -n "DELETE_NODE23_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.scaleY"; +createNode animCurveTU -n "DELETE_NODE23_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.scaleZ"; +createNode animCurveTA -n "DELETE_NODE23_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.rotateX"; +createNode animCurveTA -n "DELETE_NODE23_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.rotateY"; +createNode animCurveTA -n "DELETE_NODE23_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp.rotateZ"; +createNode animCurveTL -n "DELETE_NODE24_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.translateX"; +createNode animCurveTL -n "DELETE_NODE24_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.translateY"; +createNode animCurveTL -n "DELETE_NODE24_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.translateZ"; +createNode animCurveTU -n "DELETE_NODE24_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.scaleX"; +createNode animCurveTU -n "DELETE_NODE24_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.scaleY"; +createNode animCurveTU -n "DELETE_NODE24_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.scaleZ"; +createNode animCurveTA -n "DELETE_NODE24_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.rotateX"; +createNode animCurveTA -n "DELETE_NODE24_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.rotateY"; +createNode animCurveTA -n "DELETE_NODE24_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp.rotateZ"; +createNode animCurveTL -n "DELETE_NODE25_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE25_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE25_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE25_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE25_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE25_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE25_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE25_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE25_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE26_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE26_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE26_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE26_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE26_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE26_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE26_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE26_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE26_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE27_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE27_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE27_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE27_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE27_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE27_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE27_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE27_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE27_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE28_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE28_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE28_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE28_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE28_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE28_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE28_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE28_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE28_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE29_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.translateX"; +createNode animCurveTL -n "DELETE_NODE29_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.translateY"; +createNode animCurveTL -n "DELETE_NODE29_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.translateZ"; +createNode animCurveTU -n "DELETE_NODE29_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.scaleX"; +createNode animCurveTU -n "DELETE_NODE29_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.scaleY"; +createNode animCurveTU -n "DELETE_NODE29_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE29_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.rotateX"; +createNode animCurveTA -n "DELETE_NODE29_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.rotateY"; +createNode animCurveTA -n "DELETE_NODE29_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE30_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE30_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE30_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE30_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE30_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE30_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE30_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE30_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE30_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE31_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE31_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE31_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE31_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE31_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE31_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE31_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE31_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE31_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE32_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE32_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE32_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE32_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE32_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE32_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE32_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE32_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE32_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.rotateZ"; +createNode animCurveTU -n "DELETE_NODE32_puff"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt.puff"; +createNode animCurveTL -n "DELETE_NODE33_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE33_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE33_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE33_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE33_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE33_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE33_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE33_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE33_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.rotateZ"; +createNode animCurveTU -n "DELETE_NODE33_puff"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf.puff"; +createNode animCurveTL -n "DELETE_NODE34_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE34_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE34_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE34_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE34_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE34_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE34_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE34_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE34_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE35_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.translateX"; +createNode animCurveTL -n "DELETE_NODE35_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.translateY"; +createNode animCurveTL -n "DELETE_NODE35_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.translateZ"; +createNode animCurveTU -n "DELETE_NODE35_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.scaleX"; +createNode animCurveTU -n "DELETE_NODE35_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.scaleY"; +createNode animCurveTU -n "DELETE_NODE35_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE35_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.rotateX"; +createNode animCurveTA -n "DELETE_NODE35_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.rotateY"; +createNode animCurveTA -n "DELETE_NODE35_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE36_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE36_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE36_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE36_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE36_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE36_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE36_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE36_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE36_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE37_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE37_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE37_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE37_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE37_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE37_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE37_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE37_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE37_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt.rotateZ"; +createNode animCurveTU -n "DELETE_NODE38_md"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.md"; +createNode animCurveTU -n "DELETE_NODE38_funnel"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.funnel"; +createNode animCurveTL -n "DELETE_NODE38_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.translateX"; +createNode animCurveTL -n "DELETE_NODE38_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0.027074020754017242 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.translateY"; +createNode animCurveTL -n "DELETE_NODE38_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -0.0057109771758436824 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.translateZ"; +createNode animCurveTU -n "DELETE_NODE38_thicknessY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.thicknessY"; +createNode animCurveTU -n "DELETE_NODE38_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.scaleX"; +createNode animCurveTU -n "DELETE_NODE38_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.scaleY"; +createNode animCurveTU -n "DELETE_NODE38_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.scaleZ"; +createNode animCurveTA -n "DELETE_NODE38_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -11.911318607773504 6 18.007232567490711 + 10 18.007232567490711; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.rotateX"; +createNode animCurveTA -n "DELETE_NODE38_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.rotateY"; +createNode animCurveTA -n "DELETE_NODE38_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.rotateZ"; +createNode animCurveTU -n "DELETE_NODE38_peak"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.peak"; +createNode animCurveTU -n "DELETE_NODE38_press"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.press"; +createNode animCurveTU -n "DELETE_NODE38_puff"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.puff"; +createNode animCurveTU -n "DELETE_NODE38_thicknessZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp.thicknessZ"; +createNode animCurveTL -n "DELETE_NODE39_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.translateX"; +createNode animCurveTL -n "DELETE_NODE39_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.translateY"; +createNode animCurveTL -n "DELETE_NODE39_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.translateZ"; +createNode animCurveTU -n "DELETE_NODE39_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.scaleX"; +createNode animCurveTU -n "DELETE_NODE39_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.scaleY"; +createNode animCurveTU -n "DELETE_NODE39_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.scaleZ"; +createNode animCurveTA -n "DELETE_NODE39_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.rotateX"; +createNode animCurveTA -n "DELETE_NODE39_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.rotateY"; +createNode animCurveTA -n "DELETE_NODE39_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll.rotateZ"; +createNode animCurveTL -n "DELETE_NODE40_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE40_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE40_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE40_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE40_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE40_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE40_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE40_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE40_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE41_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.translateX"; +createNode animCurveTL -n "DELETE_NODE41_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.translateY"; +createNode animCurveTL -n "DELETE_NODE41_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE41_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE41_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE41_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE41_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE41_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE41_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE42_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.translateX"; +createNode animCurveTL -n "DELETE_NODE42_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.translateY"; +createNode animCurveTL -n "DELETE_NODE42_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE42_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE42_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE42_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE42_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE42_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE42_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE43_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.translateX"; +createNode animCurveTL -n "DELETE_NODE43_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.translateY"; +createNode animCurveTL -n "DELETE_NODE43_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE43_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE43_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE43_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE43_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE43_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE43_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE44_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.translateX"; +createNode animCurveTL -n "DELETE_NODE44_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.translateY"; +createNode animCurveTL -n "DELETE_NODE44_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE44_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE44_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE44_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE44_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE44_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE44_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE45_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.translateX"; +createNode animCurveTL -n "DELETE_NODE45_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.translateY"; +createNode animCurveTL -n "DELETE_NODE45_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE45_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE45_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE45_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE45_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE45_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE45_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE46_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.translateX"; +createNode animCurveTL -n "DELETE_NODE46_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.translateY"; +createNode animCurveTL -n "DELETE_NODE46_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE46_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE46_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE46_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE46_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE46_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE46_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE47_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.translateX"; +createNode animCurveTL -n "DELETE_NODE47_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.translateY"; +createNode animCurveTL -n "DELETE_NODE47_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.translateZ"; +createNode animCurveTU -n "DELETE_NODE47_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.scaleX"; +createNode animCurveTU -n "DELETE_NODE47_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.scaleY"; +createNode animCurveTU -n "DELETE_NODE47_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE47_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.rotateX"; +createNode animCurveTA -n "DELETE_NODE47_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.rotateY"; +createNode animCurveTA -n "DELETE_NODE47_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE48_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.translateX"; +createNode animCurveTL -n "DELETE_NODE48_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.translateY"; +createNode animCurveTL -n "DELETE_NODE48_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.translateZ"; +createNode animCurveTU -n "DELETE_NODE48_noseBrowCrunch"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.noseBrowCrunch"; +createNode animCurveTU -n "DELETE_NODE48_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.scaleX"; +createNode animCurveTU -n "DELETE_NODE48_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.scaleY"; +createNode animCurveTU -n "DELETE_NODE48_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.scaleZ"; +createNode animCurveTA -n "DELETE_NODE48_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 7.3329886924191845 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.rotateX"; +createNode animCurveTA -n "DELETE_NODE48_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1.9135552963620606 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.rotateY"; +createNode animCurveTA -n "DELETE_NODE48_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1.3626335147650102 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1.rotateZ"; +createNode animCurveTL -n "DELETE_NODE49_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0.026292450592984858 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.translateX"; +createNode animCurveTL -n "DELETE_NODE49_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0.10532761562485417 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.translateY"; +createNode animCurveTL -n "DELETE_NODE49_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE49_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE49_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE49_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE49_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE49_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE49_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE50_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.translateX"; +createNode animCurveTL -n "DELETE_NODE50_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.translateY"; +createNode animCurveTL -n "DELETE_NODE50_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE50_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE50_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE50_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE50_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE50_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE50_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt.rotateZ"; +createNode animCurveTU -n "DELETE_NODE51_nasoCrease"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.nasoCrease"; +createNode animCurveTU -n "DELETE_NODE51_cornerHeight"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.cornerHeight"; +createNode animCurveTL -n "DELETE_NODE51_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1.0559747460952333 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.translateX"; +createNode animCurveTL -n "DELETE_NODE51_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -0.41604976362508006 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.translateY"; +createNode animCurveTL -n "DELETE_NODE51_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.translateZ"; +createNode animCurveTA -n "DELETE_NODE51_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.rotateY"; +createNode animCurveTU -n "DELETE_NODE51_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE51_pucker"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.pucker"; +createNode animCurveTU -n "DELETE_NODE51_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE51_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE51_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.rotateX"; +createNode animCurveTU -n "DELETE_NODE51_cornerPinchIn"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.cornerPinchIn"; +createNode animCurveTA -n "DELETE_NODE51_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.rotateZ"; +createNode animCurveTU -n "DELETE_NODE51_disableAutoPucker"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.disableAutoPucker"; +createNode animCurveTU -n "DELETE_NODE51_cornerPinchOt"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt.cornerPinchOt"; +createNode animCurveTU -n "DELETE_NODE52_nasoCrease"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.nasoCrease"; +createNode animCurveTU -n "DELETE_NODE52_cornerHeight"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.cornerHeight"; +createNode animCurveTL -n "DELETE_NODE52_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1.0559747460952331 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.translateX"; +createNode animCurveTL -n "DELETE_NODE52_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -0.41604976362508 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.translateY"; +createNode animCurveTL -n "DELETE_NODE52_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.translateZ"; +createNode animCurveTA -n "DELETE_NODE52_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.rotateY"; +createNode animCurveTU -n "DELETE_NODE52_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE52_pucker"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.pucker"; +createNode animCurveTU -n "DELETE_NODE52_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE52_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE52_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.rotateX"; +createNode animCurveTU -n "DELETE_NODE52_cornerPinchIn"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.cornerPinchIn"; +createNode animCurveTA -n "DELETE_NODE52_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.rotateZ"; +createNode animCurveTU -n "DELETE_NODE52_disableAutoPucker"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.disableAutoPucker"; +createNode animCurveTU -n "DELETE_NODE52_cornerPinchOt"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf.cornerPinchOt"; +createNode animCurveTA -n "DELETE_NODE53_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.rotateX"; +createNode animCurveTL -n "DELETE_NODE53_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.translateX"; +createNode animCurveTL -n "DELETE_NODE53_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.translateY"; +createNode animCurveTL -n "DELETE_NODE53_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.translateZ"; +createNode animCurveTU -n "DELETE_NODE53_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.scaleX"; +createNode animCurveTU -n "DELETE_NODE53_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.scaleY"; +createNode animCurveTU -n "DELETE_NODE53_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.scaleZ"; +createNode animCurveTU -n "DELETE_NODE53_squetch"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.squetch"; +createNode animCurveTA -n "DELETE_NODE53_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.rotateY"; +createNode animCurveTA -n "DELETE_NODE53_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp.rotateZ"; +createNode animCurveTL -n "DELETE_NODE54_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 8.8817841970009752e-016 6 8.8817841970009752e-016 + 10 8.8817841970009752e-016; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.translateX"; +createNode animCurveTL -n "DELETE_NODE54_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1.304649902425564 6 0.88330452769852741 + 10 0.88330452769852741; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.translateY"; +createNode animCurveTL -n "DELETE_NODE54_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE54_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE54_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE54_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE54_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE54_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE54_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE55_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 4.4408920985004368e-016 6 4.4408920985004368e-016 + 10 4.4408920985004368e-016; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.translateX"; +createNode animCurveTL -n "DELETE_NODE55_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -0.11940397604903523 6 0.88330452769852819 + 10 0.88330452769852819; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.translateY"; +createNode animCurveTL -n "DELETE_NODE55_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE55_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE55_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE55_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE55_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE55_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE55_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE56_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 8.8817841970009802e-016 6 8.8817841970009802e-016 + 10 8.8817841970009802e-016; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.translateX"; +createNode animCurveTL -n "DELETE_NODE56_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1.304649902425564 6 0.88330452769852763 + 10 0.88330452769852763; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.translateY"; +createNode animCurveTL -n "DELETE_NODE56_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE56_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE56_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE56_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE56_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE56_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE56_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE57_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 4.4408920985004368e-016 6 4.4408920985004368e-016 + 10 4.4408920985004368e-016; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.translateX"; +createNode animCurveTL -n "DELETE_NODE57_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -0.11940397604903506 6 0.88330452769852785 + 10 0.88330452769852785; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.translateY"; +createNode animCurveTL -n "DELETE_NODE57_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE57_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE57_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE57_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE57_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE57_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE57_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE58_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.translateX"; +createNode animCurveTL -n "DELETE_NODE58_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0.3507284991589627 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.translateY"; +createNode animCurveTL -n "DELETE_NODE58_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE58_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE58_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE58_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE58_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE58_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE58_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE59_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.translateX"; +createNode animCurveTL -n "DELETE_NODE59_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.translateY"; +createNode animCurveTL -n "DELETE_NODE59_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE59_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE59_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE59_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE59_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE59_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE59_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE60_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.translateX"; +createNode animCurveTL -n "DELETE_NODE60_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0.35072849915896281 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.translateY"; +createNode animCurveTL -n "DELETE_NODE60_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE60_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE60_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE60_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE60_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE60_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE60_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE61_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.translateX"; +createNode animCurveTL -n "DELETE_NODE61_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.translateY"; +createNode animCurveTL -n "DELETE_NODE61_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE61_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE61_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE61_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE61_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE61_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE61_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE62_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.translateX"; +createNode animCurveTL -n "DELETE_NODE62_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.translateY"; +createNode animCurveTL -n "DELETE_NODE62_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE62_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE62_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE62_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE62_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE62_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE62_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE63_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.translateX"; +createNode animCurveTL -n "DELETE_NODE63_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.translateY"; +createNode animCurveTL -n "DELETE_NODE63_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE63_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE63_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.1604626114368255 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE63_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE63_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE63_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE63_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE64_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.translateX"; +createNode animCurveTL -n "DELETE_NODE64_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -0.24385272226567933 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.translateY"; +createNode animCurveTL -n "DELETE_NODE64_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE64_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE64_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE64_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE64_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE64_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE64_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.rotateZ"; +createNode animCurveTU -n "DELETE_NODE64_lidCheek"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1 6 1 10 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.lidCheek"; +createNode animCurveTU -n "DELETE_NODE64_squint"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf.squint"; +createNode animCurveTL -n "DELETE_NODE65_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.translateX"; +createNode animCurveTL -n "DELETE_NODE65_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.translateY"; +createNode animCurveTL -n "DELETE_NODE65_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE65_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE65_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE65_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE65_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE65_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE65_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE66_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.translateX"; +createNode animCurveTL -n "DELETE_NODE66_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.translateY"; +createNode animCurveTL -n "DELETE_NODE66_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE66_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE66_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE66_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE66_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE66_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE66_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE67_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.translateX"; +createNode animCurveTL -n "DELETE_NODE67_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1.2069617148462117 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.translateY"; +createNode animCurveTL -n "DELETE_NODE67_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE67_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE67_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE67_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE67_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE67_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE67_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.rotateZ"; +createNode animCurveTU -n "DELETE_NODE67_squint"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf.squint"; +createNode animCurveTU -n "DELETE_NODE68_iris"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.iris"; +createNode animCurveTL -n "DELETE_NODE68_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.translateX"; +createNode animCurveTL -n "DELETE_NODE68_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.translateY"; +createNode animCurveTL -n "DELETE_NODE68_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE68_eyeShaperVis"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr -s 3 ".kot[0:2]" 5 5 5; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.eyeShaperVis"; +createNode animCurveTU -n "DELETE_NODE68_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE68_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE68_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.scaleZ"; +createNode animCurveTU -n "DELETE_NODE68_aim"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.aim"; +createNode animCurveTA -n "DELETE_NODE68_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE68_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.rotateZ"; +createNode animCurveTU -n "DELETE_NODE68_eyeBulge"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.eyeBulge"; +createNode animCurveTU -n "DELETE_NODE68_pupil"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.pupil"; +createNode animCurveTU -n "DELETE_NODE68_lidShaperVis"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr -s 3 ".kot[0:2]" 5 5 5; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.lidShaperVis"; +createNode animCurveTA -n "DELETE_NODE68_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf.rotateX"; +createNode animCurveTL -n "DELETE_NODE69_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.translateX"; +createNode animCurveTL -n "DELETE_NODE69_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.translateY"; +createNode animCurveTL -n "DELETE_NODE69_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE69_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE69_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE69_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE69_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE69_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE69_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE70_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.translateX"; +createNode animCurveTL -n "DELETE_NODE70_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.translateY"; +createNode animCurveTL -n "DELETE_NODE70_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE70_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE70_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1.1604626114368255 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE70_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE70_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE70_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE70_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE71_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.translateX"; +createNode animCurveTL -n "DELETE_NODE71_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -0.24385272226567936 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.translateY"; +createNode animCurveTL -n "DELETE_NODE71_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE71_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE71_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE71_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE71_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE71_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE71_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.rotateZ"; +createNode animCurveTU -n "DELETE_NODE71_lidCheek"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1 6 1 10 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.lidCheek"; +createNode animCurveTU -n "DELETE_NODE71_squint"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt.squint"; +createNode animCurveTL -n "DELETE_NODE72_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.translateX"; +createNode animCurveTL -n "DELETE_NODE72_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.translateY"; +createNode animCurveTL -n "DELETE_NODE72_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE72_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE72_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE72_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE72_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE72_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE72_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE73_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.translateX"; +createNode animCurveTL -n "DELETE_NODE73_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.translateY"; +createNode animCurveTL -n "DELETE_NODE73_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE73_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE73_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE73_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE73_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE73_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE73_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE74_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.translateX"; +createNode animCurveTL -n "DELETE_NODE74_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1.2069617148462115 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.translateY"; +createNode animCurveTL -n "DELETE_NODE74_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE74_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE74_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE74_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE74_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE74_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE74_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.rotateZ"; +createNode animCurveTU -n "DELETE_NODE74_squint"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt.squint"; +createNode animCurveTU -n "DELETE_NODE75_iris"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.iris"; +createNode animCurveTL -n "DELETE_NODE75_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.translateX"; +createNode animCurveTL -n "DELETE_NODE75_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.translateY"; +createNode animCurveTL -n "DELETE_NODE75_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE75_eyeShaperVis"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr -s 3 ".kot[0:2]" 5 5 5; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.eyeShaperVis"; +createNode animCurveTU -n "DELETE_NODE75_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE75_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE75_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.scaleZ"; +createNode animCurveTU -n "DELETE_NODE75_aim"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.aim"; +createNode animCurveTA -n "DELETE_NODE75_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE75_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.rotateZ"; +createNode animCurveTU -n "DELETE_NODE75_eyeBulge"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.eyeBulge"; +createNode animCurveTU -n "DELETE_NODE75_pupil"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.pupil"; +createNode animCurveTU -n "DELETE_NODE75_lidShaperVis"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr -s 3 ".kot[0:2]" 5 5 5; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.lidShaperVis"; +createNode animCurveTA -n "DELETE_NODE75_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt.rotateX"; +createNode animCurveTL -n "DELETE_NODE76_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.translateX"; +createNode animCurveTL -n "DELETE_NODE76_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.translateY"; +createNode animCurveTL -n "DELETE_NODE76_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.translateZ"; +createNode animCurveTU -n "DELETE_NODE76_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.scaleX"; +createNode animCurveTU -n "DELETE_NODE76_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.scaleY"; +createNode animCurveTU -n "DELETE_NODE76_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.scaleZ"; +createNode animCurveTA -n "DELETE_NODE76_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.rotateX"; +createNode animCurveTA -n "DELETE_NODE76_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.rotateY"; +createNode animCurveTA -n "DELETE_NODE76_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront.rotateZ"; +createNode animCurveTL -n "DELETE_NODE77_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.translateX"; +createNode animCurveTL -n "DELETE_NODE77_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.translateY"; +createNode animCurveTL -n "DELETE_NODE77_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.translateZ"; +createNode animCurveTU -n "DELETE_NODE77_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.scaleX"; +createNode animCurveTU -n "DELETE_NODE77_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.scaleY"; +createNode animCurveTU -n "DELETE_NODE77_visibility"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 9; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr -s 2 ".kot[0:1]" 5 5; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.visibility"; +createNode animCurveTA -n "DELETE_NODE77_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.rotateX"; +createNode animCurveTA -n "DELETE_NODE77_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.rotateY"; +createNode animCurveTA -n "DELETE_NODE77_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.rotateZ"; +createNode animCurveTU -n "DELETE_NODE77_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2.scaleZ"; +createNode animCurveTL -n "DELETE_NODE78_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.translateX"; +createNode animCurveTL -n "DELETE_NODE78_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.translateY"; +createNode animCurveTL -n "DELETE_NODE78_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE78_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE78_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE78_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE78_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE78_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE78_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE79_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.translateX"; +createNode animCurveTL -n "DELETE_NODE79_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.translateY"; +createNode animCurveTL -n "DELETE_NODE79_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE79_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE79_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE79_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE79_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE79_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE79_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE80_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.translateX"; +createNode animCurveTL -n "DELETE_NODE80_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.translateY"; +createNode animCurveTL -n "DELETE_NODE80_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE80_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE80_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE80_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE80_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE80_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE80_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE81_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.translateX"; +createNode animCurveTL -n "DELETE_NODE81_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.translateY"; +createNode animCurveTL -n "DELETE_NODE81_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE81_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE81_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE81_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE81_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE81_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE81_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE82_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.translateX"; +createNode animCurveTL -n "DELETE_NODE82_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.translateY"; +createNode animCurveTL -n "DELETE_NODE82_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.translateZ"; +createNode animCurveTU -n "DELETE_NODE82_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.scaleX"; +createNode animCurveTU -n "DELETE_NODE82_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.scaleY"; +createNode animCurveTU -n "DELETE_NODE82_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE82_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.rotateX"; +createNode animCurveTA -n "DELETE_NODE82_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.rotateY"; +createNode animCurveTA -n "DELETE_NODE82_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE83_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.translateX"; +createNode animCurveTL -n "DELETE_NODE83_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.translateY"; +createNode animCurveTL -n "DELETE_NODE83_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.translateZ"; +createNode animCurveTU -n "DELETE_NODE83_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.scaleX"; +createNode animCurveTU -n "DELETE_NODE83_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.scaleY"; +createNode animCurveTU -n "DELETE_NODE83_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.scaleZ"; +createNode animCurveTA -n "DELETE_NODE83_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.rotateX"; +createNode animCurveTA -n "DELETE_NODE83_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.rotateY"; +createNode animCurveTA -n "DELETE_NODE83_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf.rotateZ"; +createNode animCurveTL -n "DELETE_NODE84_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.translateX"; +createNode animCurveTL -n "DELETE_NODE84_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.translateY"; +createNode animCurveTL -n "DELETE_NODE84_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.translateZ"; +createNode animCurveTU -n "DELETE_NODE84_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.scaleX"; +createNode animCurveTU -n "DELETE_NODE84_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.scaleY"; +createNode animCurveTU -n "DELETE_NODE84_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE84_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.rotateX"; +createNode animCurveTA -n "DELETE_NODE84_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.rotateY"; +createNode animCurveTA -n "DELETE_NODE84_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE85_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.translateX"; +createNode animCurveTL -n "DELETE_NODE85_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.translateY"; +createNode animCurveTL -n "DELETE_NODE85_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.translateZ"; +createNode animCurveTU -n "DELETE_NODE85_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.scaleX"; +createNode animCurveTU -n "DELETE_NODE85_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.scaleY"; +createNode animCurveTU -n "DELETE_NODE85_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE85_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.rotateX"; +createNode animCurveTA -n "DELETE_NODE85_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.rotateY"; +createNode animCurveTA -n "DELETE_NODE85_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt.rotateZ"; +createNode animCurveTL -n "DELETE_NODE86_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.translateX"; +createNode animCurveTL -n "DELETE_NODE86_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.translateY"; +createNode animCurveTL -n "DELETE_NODE86_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.translateZ"; +createNode animCurveTU -n "DELETE_NODE86_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.scaleX"; +createNode animCurveTU -n "DELETE_NODE86_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.scaleY"; +createNode animCurveTU -n "DELETE_NODE86_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.scaleZ"; +createNode animCurveTA -n "DELETE_NODE86_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.rotateX"; +createNode animCurveTA -n "DELETE_NODE86_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.rotateY"; +createNode animCurveTA -n "DELETE_NODE86_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal.rotateZ"; +createNode animCurveTL -n "DELETE_NODE87_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.translateX"; +createNode animCurveTL -n "DELETE_NODE87_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.translateY"; +createNode animCurveTL -n "DELETE_NODE87_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.translateZ"; +createNode animCurveTU -n "DELETE_NODE87_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.scaleX"; +createNode animCurveTU -n "DELETE_NODE87_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.scaleY"; +createNode animCurveTU -n "DELETE_NODE87_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.scaleZ"; +createNode animCurveTA -n "DELETE_NODE87_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 -4.1213113705648654 10 -4.1213113705648654; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.rotateX"; +createNode animCurveTA -n "DELETE_NODE87_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 5.5893874365085248 10 5.5893874365085248; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.rotateY"; +createNode animCurveTA -n "DELETE_NODE87_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 4.4369908596991907 10 4.4369908596991907; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.rotateZ"; +createNode animCurveTU -n "DELETE_NODE87_orientToPlacement"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 1 6 1 10 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead.orientToPlacement"; +createNode animCurveTL -n "DELETE_NODE88_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.translateX"; +createNode animCurveTL -n "DELETE_NODE88_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.translateY"; +createNode animCurveTL -n "DELETE_NODE88_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.translateZ"; +createNode animCurveTU -n "DELETE_NODE88_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.scaleX"; +createNode animCurveTU -n "DELETE_NODE88_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.scaleY"; +createNode animCurveTU -n "DELETE_NODE88_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.scaleZ"; +createNode animCurveTA -n "DELETE_NODE88_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.rotateX"; +createNode animCurveTA -n "DELETE_NODE88_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.rotateY"; +createNode animCurveTA -n "DELETE_NODE88_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient.rotateZ"; +createNode animCurveTU -n "DELETE_NODE89_md"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.md"; +createNode animCurveTU -n "DELETE_NODE89_funnel"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.funnel"; +createNode animCurveTL -n "DELETE_NODE89_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.translateX"; +createNode animCurveTL -n "DELETE_NODE89_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 -0.041725743879269937 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.translateY"; +createNode animCurveTL -n "DELETE_NODE89_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.translateZ"; +createNode animCurveTU -n "DELETE_NODE89_thicknessY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.thicknessY"; +createNode animCurveTU -n "DELETE_NODE89_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.scaleX"; +createNode animCurveTU -n "DELETE_NODE89_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.scaleY"; +createNode animCurveTU -n "DELETE_NODE89_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.scaleZ"; +createNode animCurveTA -n "DELETE_NODE89_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 1.2258616735674603 10 1.2258616735674603; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.rotateX"; +createNode animCurveTA -n "DELETE_NODE89_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.rotateY"; +createNode animCurveTA -n "DELETE_NODE89_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.rotateZ"; +createNode animCurveTU -n "DELETE_NODE89_peak"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.peak"; +createNode animCurveTU -n "DELETE_NODE89_press"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.press"; +createNode animCurveTU -n "DELETE_NODE89_puff"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.puff"; +createNode animCurveTU -n "DELETE_NODE89_thicknessZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt.thicknessZ"; +createNode animCurveTL -n "DELETE_NODE90_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.translateX"; +createNode animCurveTL -n "DELETE_NODE90_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.translateY"; +createNode animCurveTL -n "DELETE_NODE90_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.translateZ"; +createNode animCurveTU -n "DELETE_NODE90_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.scaleX"; +createNode animCurveTU -n "DELETE_NODE90_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.scaleY"; +createNode animCurveTU -n "DELETE_NODE90_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.scaleZ"; +createNode animCurveTA -n "DELETE_NODE90_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.rotateX"; +createNode animCurveTA -n "DELETE_NODE90_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.rotateY"; +createNode animCurveTA -n "DELETE_NODE90_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis.rotateZ"; +createNode animCurveTL -n "DELETE_NODE91_translateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.translateX"; +createNode animCurveTL -n "DELETE_NODE91_translateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.translateY"; +createNode animCurveTL -n "DELETE_NODE91_translateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.translateZ"; +createNode animCurveTU -n "DELETE_NODE91_scaleX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.scaleX"; +createNode animCurveTU -n "DELETE_NODE91_scaleY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.scaleY"; +createNode animCurveTU -n "DELETE_NODE91_scaleZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 2 ".ktv[0:1]" 1 1 6 1; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.scaleZ"; +createNode animCurveTA -n "DELETE_NODE91_rotateX"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.rotateX"; +createNode animCurveTA -n "DELETE_NODE91_rotateY"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.rotateY"; +createNode animCurveTA -n "DELETE_NODE91_rotateZ"; + addAttr -ci true -sn "fullname" -ln "fullname" -dt "string"; + setAttr ".tan" 18; + setAttr ".wgt" no; + setAttr -s 3 ".ktv[0:2]" 1 0 6 0 10 0; + setAttr ".pre" 4; + setAttr ".pst" 4; + setAttr -k on ".fullname" -type "string" "|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1.rotateZ"; +select -ne :time1; + setAttr ".o" 9; + setAttr ".unw" 9; +select -ne :renderPartition; + setAttr -s 230 ".st"; +select -ne :initialShadingGroup; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr ".ro" yes; +select -ne :defaultShaderList1; + setAttr -s 218 ".s"; +select -ne :postProcessList1; + setAttr -s 2 ".p"; +select -ne :defaultRenderUtilityList1; + setAttr -s 120 ".u"; +select -ne :defaultRenderingList1; + setAttr -s 6 ".r"; +select -ne :renderGlobalsList1; +select -ne :hardwareRenderGlobals; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +select -ne :defaultHardwareRenderGlobals; + setAttr ".fn" -type "string" "im"; + setAttr ".res" -type "string" "ntsc_4d 646 485 1.333"; +select -ne :characterPartition; +select -ne :ikSystem; + setAttr -s 7 ".sol"; +select -ne :hyperGraphLayout; + setAttr -s 3 ".hyp"; +// End of animation.ma diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/pose.dict b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/pose.dict new file mode 100644 index 0000000..fee0538 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.anim/pose.dict @@ -0,0 +1 @@ +{u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', -4.1213113705648654), u'rotateY': (u'doubleAngle', 5.5893874365085248), u'rotateZ': (u'doubleAngle', 4.4369908596991907), u'orientToPlacement': (u'double', 1.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Lf|malcolm1:ctlTeethTp1Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf|malcolm1:grpEar2Lf|malcolm1:ctlEar2Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpHeadOrient|malcolm1:ctlHeadOrient': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf|malcolm1:eyeLidDrivenLf|malcolm1:ctlEyeLidLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:lipJointsSpacedRt_NeutralPose|malcolm1:lipJointsSpacedRt|malcolm1:grpLipTp2SpacedRt|malcolm1:grp2Driven1LipTp2Rt|malcolm1:grp1Driven1LipTp2Rt|malcolm1:ctlLipTp2Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grp1Chin1|malcolm1:grpChin1|malcolm1:ctlChin1': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerRt|malcolm1:ctlCornerRt': {u'nasoCrease': (u'double', 0.0), u'cornerHeight': (u'double', 0.0), u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'cornerPinchIn': (u'double', 0.0), u'pucker': (u'double', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'disableAutoPucker': (u'double', 0.0), u'cornerPinchOt': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnInLf|malcolm1:ctlLidCrnInLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperBtLf|malcolm1:ctlEyeShaperBtLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedRt|malcolm1:ctlCheek1Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'puff': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTpCtSpaced|malcolm1:grp2Driven1LipTpCt|malcolm1:grp1Driven1LipTpCt|malcolm1:ctlLipTpCt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpCt|malcolm1:ctlTeethTpCt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInRt|malcolm1:ctlBrowInRt': {u'translateX': (u'doubleLinear', 8.8817841970009802e-16), u'translateY': (u'doubleLinear', 0.88330452769852763), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidCrnOtLf|malcolm1:ctlLidCrnOtLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtCt|malcolm1:ctlTeethBtCt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Rt|malcolm1:ctlTeethBtLower2Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinLf|malcolm1:grp3LipCornerSkinLf|malcolm1:grp2LipCornerSkinLf|malcolm1:ctlLipCornerSkinLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnTpSpacedLf|malcolm1:ctlLipCrnTpLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt|malcolm1:grpEar2Rt|malcolm1:ctlEar2Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnInRt|malcolm1:ctlLidCrnInRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdLf|malcolm1:ctlBrowMdLf': {u'translateX': (u'doubleLinear', 4.4408920985004368e-16), u'translateY': (u'doubleLinear', 0.88330452769852819), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBtLower2Lf|malcolm1:ctlTeethBtLower2Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersLf|malcolm1:grpEyeShaperTpLf|malcolm1:ctlEyeShaperTpLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Rt|malcolm1:ctlTeethBt2Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedLf|malcolm1:grp2Driven1LipBt2Lf|malcolm1:grp1Driven1LipBt2Lf|malcolm1:ctlLipBt2Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNose|malcolm1:ctlNose1': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'noseBrowCrunch': (u'double', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBtCtSpaced|malcolm1:grp2Driven1LipBtCt|malcolm1:grp1Driven1LipBtCt|malcolm1:ctlLipBtCt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grp4LipCornerSkinRt|malcolm1:grp3LipCornerSkinRt|malcolm1:grp2LipCornerSkinRt|malcolm1:ctlLipCornerSkinRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp': {u'md': (u'double', 0.0), u'funnel': (u'double', 0.0), u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'thicknessY': (u'double', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 18.007232567490711), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'peak': (u'double', 0.0), u'press': (u'double', 0.0), u'puff': (u'double', 0.0), u'thicknessZ': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnTpSpacedRt|malcolm1:ctlLipCrnTpRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Lf|malcolm1:ctlTeethTpUpper2Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedLf|malcolm1:ctlCheekTpOtLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpMentalis|malcolm1:ctlMentalis': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Rt|malcolm1:ctlTeethTp2Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpHeadShaperRigSpaced|malcolm1:grpCheek1SpacedLf|malcolm1:ctlCheek1Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'puff': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidBtRt|malcolm1:ctlLidBtRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'lidCheek': (u'double', 1.0), u'squint': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpCornerLf|malcolm1:ctlCornerLf': {u'nasoCrease': (u'double', 0.0), u'cornerHeight': (u'double', 0.0), u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'cornerPinchIn': (u'double', 0.0), u'pucker': (u'double', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'disableAutoPucker': (u'double', 0.0), u'cornerPinchOt': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperBtRt|malcolm1:ctlEyeShaperBtRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Rt|malcolm1:ctlTeethBt1Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp1Rt|malcolm1:ctlTeethTp1Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidBtLf|malcolm1:ctlLidBtLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'lidCheek': (u'double', 1.0), u'squint': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:lipBtDriven|malcolm1:ctlLipBt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedRt|malcolm1:grp2Driven1LipBt1Rt|malcolm1:grp1Driven1LipBt1Rt|malcolm1:ctlLipBt1Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt|malcolm1:grpLipBt1SpacedLf|malcolm1:grp2Driven1LipBt1Lf|malcolm1:grp1Driven1LipBt1Lf|malcolm1:ctlLipBt1Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpLidTpLf|malcolm1:ctlLidTpLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'squint': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt|malcolm1:eyeLidDrivenRt|malcolm1:ctlEyeLidRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipTpSkin1Driven|malcolm1:ctlLipTp': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtRt|malcolm1:ctlBrowOtRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseRt|malcolm1:ctlNoseRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpHeadShaperRigJawAttachSpaced|malcolm1:grpLipBt2SpacedRt|malcolm1:grp2Driven1LipBt2Rt|malcolm1:grp1Driven1LipBt2Rt|malcolm1:ctlLipBt2Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpPupilRt|malcolm1:ctlPupilRt': {u'iris': (u'double', 0.0), u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'eyeShaperVis': (u'bool', False), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'aim': (u'double', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'eyeBulge': (u'double', 0.0), u'pupil': (u'double', 0.0), u'lidShaperVis': (u'bool', False), u'rotateX': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipTp2SpacedLf|malcolm1:grp2Driven1LipTp2Lf|malcolm1:grp1Driven1LipTp2Lf|malcolm1:ctlLipTp2Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowInLf|malcolm1:ctlBrowInLf': {u'translateX': (u'doubleLinear', 8.8817841970009752e-16), u'translateY': (u'doubleLinear', 0.88330452769852741), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt1Lf|malcolm1:ctlTeethBt1Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowMdRt|malcolm1:ctlBrowMdRt': {u'translateX': (u'doubleLinear', 4.4408920985004368e-16), u'translateY': (u'doubleLinear', 0.88330452769852785), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:lipJointsSpacedLf|malcolm1:grpLipCrnSpacedLf|malcolm1:grp2Driven1LipCrnLf|malcolm1:grp1Driven1LipCrnLf|malcolm1:ctlLipCrnLf|malcolm1:grpLipCrnBtSpacedLf|malcolm1:ctlLipCrnBtLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHairRig|malcolm1:grpHairFront|malcolm1:ctlHairFront|malcolm1:grpFHair1|malcolm1:ctlFHair2': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'visibility': (u'bool', True), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'scaleZ': (u'double', 1.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotRt|malcolm1:earPivotRt|malcolm1:grpEarRt|malcolm1:ctlEarRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2|malcolm1:grpTongue3|malcolm1:ctlTongue3|malcolm1:grpTongue4|malcolm1:ctlTongue4|malcolm1:grpTongue5|malcolm1:ctlTongue5': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidTpRt|malcolm1:ctlLidTpRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'squint': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp': {u'squetch': (u'double', 0.0), u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTpUpper2Rt|malcolm1:ctlTeethTpUpper2Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grpEyeShapers|malcolm1:grpEyeShapersRt|malcolm1:grpEyeShaperTpRt|malcolm1:ctlEyeShaperTpRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpLidCrnOtRt|malcolm1:ctlLidCrnOtRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipCrnSpacedRt|malcolm1:grp2Driven1LipCrnRt|malcolm1:grp1Driven1LipCrnRt|malcolm1:ctlLipCrnRt|malcolm1:grpLipCrnBtSpacedRt|malcolm1:ctlLipCrnBtRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedRt|malcolm1:grp2Driven1LipTp1Rt|malcolm1:grp1Driven1LipTp1Rt|malcolm1:ctlLipTp1Rt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grp1CheekTpOtSpacedRt|malcolm1:ctlCheekTpOtRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpTeethBt|malcolm1:ctlTeethBt|malcolm1:grpTeethBt2Lf|malcolm1:ctlTeethBt2Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:jntJawRot|malcolm1:grpTongueRig|malcolm1:grpTongue1|malcolm1:ctlTongue1|malcolm1:grpTongue2|malcolm1:ctlTongue2': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpBrowOtLf|malcolm1:ctlBrowOtLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpEyeLf|malcolm1:grpEyeLid1Lf|malcolm1:ctlEyeLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 0.89602022283079519), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllRt|malcolm1:grpEyeRt|malcolm1:grpEyeLid1Rt|malcolm1:ctlEyeRt': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 0.89602022283079519), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:ctlHeadTp|malcolm1:grp1HeadTp|malcolm1:grpHeadTpParts|malcolm1:grpEyeAllLf|malcolm1:grpPupilLf|malcolm1:ctlPupilLf': {u'iris': (u'double', 0.0), u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'eyeShaperVis': (u'bool', False), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'aim': (u'double', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'eyeBulge': (u'double', 0.0), u'pupil': (u'double', 0.0), u'lidShaperVis': (u'bool', False), u'rotateX': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpLipAllTp|malcolm1:ctlLipAll|malcolm1:grpLipMdTp|malcolm1:ctlLipMdTp|malcolm1:grpLipTp1SpacedLf|malcolm1:grp2Driven1LipTp1Lf|malcolm1:grp1Driven1LipTp1Lf|malcolm1:ctlLipTp1Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:jawTrans1|malcolm1:jawRot1|malcolm1:jawTrans|malcolm1:ctlJawRot|malcolm1:jawRot|malcolm1:grpLipMdBt|malcolm1:ctlLipMdBt': {u'md': (u'double', 0.0), u'funnel': (u'double', 0.0), u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'thicknessY': (u'double', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 1.2258616735674603), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'peak': (u'double', 0.0), u'press': (u'double', 0.0), u'puff': (u'double', 0.0), u'thicknessZ': (u'double', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:ctlHeadBt|malcolm1:grpTeethTp|malcolm1:ctlTeethTp|malcolm1:grpTeethTp2Lf|malcolm1:ctlTeethTp2Lf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:grpHeadTp|malcolm1:grpEarPivotLf|malcolm1:earPivotLf|malcolm1:grpEarLf|malcolm1:ctlEarLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:grpHeadBt|malcolm1:grp1Nose|malcolm1:grpNoseLf|malcolm1:ctlNoseLf': {u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0), u'translateZ': (u'doubleLinear', 0.0), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'rotateX': (u'doubleAngle', 0.0), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0)}, u'|malcolm1:malcolm|malcolm1:ctlPlacement|malcolm1:grpBodyPivot1|malcolm1:ctlBodyPivot1|malcolm1:grpBody|malcolm1:ctlBody|malcolm1:ctlBodyGimbal|malcolm1:grpBodyPivot2|malcolm1:ctlBodyPivot2|malcolm1:transfogroup1|malcolm1:grpSpine1|malcolm1:grpSpine2|malcolm1:ctlSpine1|malcolm1:ctlSpineGimbal1|malcolm1:grpSpine3|malcolm1:ctlSpine2|malcolm1:ctlSpineGimbal2|malcolm1:grpChest1|malcolm1:ctlChest1|malcolm1:ctlChestGimbal1|malcolm1:grpChest2|malcolm1:ctlChest2|malcolm1:ctlChestGimbal2|malcolm1:grpNeck1|malcolm1:ctlNeck1|malcolm1:grpNeck1Twist|malcolm1:ctlNeck1Twist|malcolm1:grpNeck2|malcolm1:ctlNeck2|malcolm1:grp1Head|malcolm1:grpHead|malcolm1:ctlHead|malcolm1:ctlHeadGimbal|malcolm1:grpHeadAll|malcolm1:jawCtrl1|malcolm1:ctlJaw': {u'jawStretch': (u'double', 0.0), u'translateX': (u'doubleLinear', 0.0), u'translateY': (u'doubleLinear', 0.0033959318634735991), u'translateZ': (u'doubleLinear', 0.037225733300033453), u'scaleX': (u'double', 1.0), u'scaleY': (u'double', 1.0), u'scaleZ': (u'double', 1.0), u'lipsSeal': (u'double', 0.0), u'rotateX': (u'doubleAngle', -5.2124021846970194), u'rotateY': (u'doubleAngle', 0.0), u'rotateZ': (u'doubleAngle', 0.0), u'lipSealHeight': (u'double', 0.0)}} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.dict b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.dict new file mode 100644 index 0000000..d3fafbd --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_older_version.dict @@ -0,0 +1,34 @@ +{'srcSphere:sphere': { + 'rotateX': ('doubleAngle', 45.0), + 'testEnum': ('enum', 1), + 'translateX': ('doubleLinear', 0.0), + 'translateY': ('doubleLinear', 8.0), + 'translateZ': ('doubleLinear', -12.0), + 'rotateY': ('doubleAngle', 50.0), + 'testFloat': ('double', 0.66600000000000004), + 'testAnimated': ('double', 0.0), + 'scaleX': ('double', 0.25), + 'scaleY': ('double', 4.6600000000000001), + 'visibility': ('bool', True), + 'testString': ('string', u'Hello world'), + 'testVectorX': ('double', 0.20000000000000001), + 'testVectorY': ('double', 1.3999999999999999), + 'rotateZ': ('doubleAngle', 90.0), + 'testVectorZ': ('double', 2.6000000000000001), + 'scaleZ': ('double', 0.5), + 'testInteger': ('long', 5), + 'testBoolean': ('bool', True), + 'testConnect': ('double', 8.0) +}, +'srcSphere:lockedNode': { + 'translateX': ('doubleLinear', 0.0), + 'translateY': ('doubleLinear', 5.0), + 'translateZ': ('doubleLinear', 0.0), + 'scaleX': ('double', 1.0), + 'scaleY': ('double', 1.0), + 'visibility': ('bool', True), + 'rotateX': ('doubleAngle', 0.0), + 'rotateY': ('doubleAngle', 0.0), + 'rotateZ': ('doubleAngle', 0.0), + 'scaleZ': ('double', 1.0) +}} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_pose.ma b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_pose.ma new file mode 100644 index 0000000..f57ec86 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_pose.ma @@ -0,0 +1,269 @@ +//Maya ASCII 2012 scene +//Name: test_pose_attributes.ma +//Last modified: Sun, May 11, 2014 11:20:29 AM +//Codeset: 1252 +file -rdi 1 -ns "srcSphere" -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -rdi 1 -ns "dstSphere" -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -r -ns "srcSphere" -dr 1 -rfn "srcSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +file -r -ns "dstSphere" -dr 1 -rfn "dstSphereRN" "C:/Users/hovel/Dropbox/packages/python/Lib/site-packages/studioLibrary/site-packages/mutils/tests/data/sphere.ma"; +requires maya "2011"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2014"; +fileInfo "version" "2014 x64"; +fileInfo "cutIdentifier" "201303010241-864206"; +fileInfo "osv" "Microsoft Windows 7 Ultimate Edition, 64-bit Windows 7 Service Pack 1 (Build 7601)\n"; +createNode transform -s -n "persp"; + setAttr ".v" no; + setAttr ".t" -type "double3" -28.491244113009635 26.169676127690515 68.655966560486604 ; + setAttr ".r" -type "double3" -16.538352729583153 -22.60000000001666 4.306379281917478e-016 ; +createNode camera -s -n "perspShape" -p "persp"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".coi" 76.176692107312178; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 100.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; +createNode transform -s -n "front"; + setAttr ".v" no; + setAttr ".t" -type "double3" 2.0350096678112575 0.39361762628711539 100.1 ; +createNode camera -s -n "frontShape" -p "front"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 61.766282942468983; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; +createNode transform -s -n "side"; + setAttr ".v" no; + setAttr ".t" -type "double3" 100.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; +createNode lightLinker -s -n "lightLinker1"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode displayLayerManager -n "layerManager"; +createNode displayLayer -n "defaultLayer"; +createNode renderLayerManager -n "renderLayerManager"; +createNode renderLayer -n "defaultRenderLayer"; + setAttr ".g" yes; +createNode script -n "uiConfigurationScriptNode"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n" + + " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n" + + " -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n" + + " -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n" + + " -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n" + + " -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels `;\n" + + "\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n" + + " -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n" + + " -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n" + + " -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n" + + " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n" + + " -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n" + + " -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n" + + " -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n" + + " -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n" + + " -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n" + + " modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n" + + " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n" + + " -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 0\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 0\n -hairSystems 0\n -follicles 0\n -nCloths 0\n -nParticles 0\n -nRigids 0\n -dynamicConstraints 0\n -locators 1\n -manipulators 1\n -pluginShapes 1\n" + + " -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 0\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n" + + " -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -rendererName \"base_OpenGL_Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n" + + " -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 0\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 0\n -hairSystems 0\n -follicles 0\n -nCloths 0\n -nParticles 0\n -nRigids 0\n -dynamicConstraints 0\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n" + + " -strokes 1\n -motionTrails 1\n -clipGhosts 0\n -greasePencils 1\n -shadows 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 1\n -showReferenceNodes 1\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n" + + " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n" + + " -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 1\n -showReferenceNodes 1\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n" + + " -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n" + + " -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\toutlinerPanel -e -to $panelName;\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 1\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 1\n" + + " -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n" + + " -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n" + + " -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 1\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 1\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n" + + " -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n" + + " -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -stackedCurves 0\n" + + " -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n" + + " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n" + + " -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 0\n -selectionWindow 0 0 0 0 \n" + + " $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n" + + " -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n $editorName;\n" + + "\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 0\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n" + + " clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"integer\" \n -manageSequencer 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"integer\" \n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n" + + "\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"sequenceEditorPanel\" -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n" + + " -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -autoFit 0\n -snapTime \"none\" \n -snapValue \"none\" \n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperGraphPanel\" -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 1\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n" + + " -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n" + + " -orientation \"horiz\" \n -mergeConnections 1\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"visorPanel\" -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -ignoreAssets 1\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -keyReleaseCommand \"nodeEdKeyReleaseCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n" + + " -island 0\n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -syncedSelection 1\n -extendToShapes 1\n $editorName;;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -ignoreAssets 1\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -keyReleaseCommand \"nodeEdKeyReleaseCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n" + + " -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -island 0\n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -syncedSelection 1\n -extendToShapes 1\n $editorName;;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"createNodePanel\" -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Texture Editor\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"polyTexturePlacementPanel\" -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Texture Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"renderWindowPanel\" -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"blendShapePanel\" (localizedPanelLabel(\"Blend Shape\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\tblendShapePanel -unParent -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels ;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tblendShapePanel -edit -l (localizedPanelLabel(\"Blend Shape\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynRelEdPanel\" -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"relationshipPanel\" -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"referenceEditorPanel\" -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"componentEditorPanel\" -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dynPaintScriptedPanelType\" -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n" + + "\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"scriptEditorPanel\" -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\tif ($useSceneConfig) {\n\t\tscriptedPanel -e -to $panelName;\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"Stereo\" -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels `;\nstring $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n" + + " -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n" + + " -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n" + + " -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n" + + "string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 8192\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n" + + " -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -maxConstantTransparency 1\n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n" + + " -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n" + + " stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-defaultImage \"vacantCell.xpm\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"wireframe\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 1\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 8192\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -maxConstantTransparency 1\\n -rendererName \\\"base_OpenGL_Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 0\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -fluids 0\\n -hairSystems 0\\n -follicles 0\\n -nCloths 0\\n -nParticles 0\\n -nRigids 0\\n -dynamicConstraints 0\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 0\\n -greasePencils 1\\n -shadows 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"wireframe\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 1\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 8192\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -maxConstantTransparency 1\\n -rendererName \\\"base_OpenGL_Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 0\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -fluids 0\\n -hairSystems 0\\n -follicles 0\\n -nCloths 0\\n -nParticles 0\\n -nRigids 0\\n -dynamicConstraints 0\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 0\\n -greasePencils 1\\n -shadows 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 1 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 24 -ast 1 -aet 48 "; + setAttr ".st" 6; +createNode reference -n "srcSphereRN"; + setAttr ".ed" -type "dataReferenceEdits" + "srcSphereRN" + "srcSphereRN" 0 + "srcSphereRN" 14 + 2 "|srcSphere:group|srcSphere:sphere" "translate" " -type \"double3\" 0 8 -12" + + 2 "|srcSphere:group|srcSphere:sphere" "rotate" " -type \"double3\" 45 25 90" + + 2 "|srcSphere:group|srcSphere:sphere" "scale" " -type \"double3\" 0.25 1.5 0.5" + + 2 "|srcSphere:group|srcSphere:sphere" "testVector" " -k 1 -type \"double3\" 0.2 1.4 2.6" + + 2 "|srcSphere:group|srcSphere:sphere" "testVector" " -k 1" + 2 "|srcSphere:group|srcSphere:sphere" "testVectorX" " -k 1" + 2 "|srcSphere:group|srcSphere:sphere" "testVectorY" " -k 1" + 2 "|srcSphere:group|srcSphere:sphere" "testVectorZ" " -k 1" + 2 "|srcSphere:group|srcSphere:sphere" "testColor" " -type \"float3\" 0.18 0.6 0.18" + + 2 "|srcSphere:group|srcSphere:sphere" "testString" " -k 1 -type \"string\" \"Hello world\"" + + 2 "|srcSphere:group|srcSphere:sphere" "testEnum" " -k 1 1" + 2 "|srcSphere:group|srcSphere:sphere" "testFloat" " -k 1 0.666" + 2 "|srcSphere:group|srcSphere:sphere" "testBoolean" " -k 1 1" + 2 "|srcSphere:group|srcSphere:sphere" "testInteger" " -k 1 5"; + setAttr ".ptag" -type "string" ""; +lockNode -l 1 ; +createNode reference -n "dstSphereRN"; + setAttr ".ed" -type "dataReferenceEdits" + "dstSphereRN" + "dstSphereRN" 0 + "dstSphereRN" 13 + 2 "|dstSphere:group|dstSphere:sphere" "visibility" " 1" + 2 "|dstSphere:group|dstSphere:sphere" "translate" " -type \"double3\" 0 0 0" + + 2 "|dstSphere:group|dstSphere:sphere" "rotate" " -type \"double3\" 0 0 0" + + 2 "|dstSphere:group|dstSphere:sphere" "scale" " -type \"double3\" 1 1 1" + 2 "|dstSphere:group|dstSphere:sphere" "testVector" " -k 1 -type \"double3\" 0 0 0" + + 2 "|dstSphere:group|dstSphere:sphere" "testVector" " -k 1" + 2 "|dstSphere:group|dstSphere:sphere" "testVectorX" " -k 1" + 2 "|dstSphere:group|dstSphere:sphere" "testVectorY" " -k 1" + 2 "|dstSphere:group|dstSphere:sphere" "testVectorZ" " -k 1" + 2 "|dstSphere:group|dstSphere:sphere" "testEnum" " -k 1 2" + 2 "|dstSphere:group|dstSphere:sphere" "testFloat" " -k 1 0" + 2 "|dstSphere:group|dstSphere:sphere" "testBoolean" " -k 1 0" + 2 "|dstSphere:group|dstSphere:sphere" "testInteger" " -k 1 0"; + setAttr ".ptag" -type "string" ""; +lockNode -l 1 ; +select -ne :time1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".o" 1; + setAttr ".unw" 1; +select -ne :renderPartition; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".st"; +select -ne :initialShadingGroup; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".dsm"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :initialParticleSE; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -s 3 ".r"; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -k on ".nds"; +select -ne :defaultResolution; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -av ".w"; + setAttr -av ".h"; + setAttr -k on ".pa" 1; + setAttr -k on ".al"; + setAttr -av ".dar"; + setAttr -k on ".ldar"; + setAttr -k on ".off"; + setAttr -k on ".fld"; + setAttr -k on ".zsl"; +select -ne :defaultLightSet; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr -k on ".mwc"; + setAttr ".ro" yes; +select -ne :hardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".ctrs" 256; + setAttr ".btrs" 512; +select -ne :hardwareRenderingGlobals; + setAttr ".otfna" -type "stringArray" 18 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surfaces" "Particles" "Fluids" "Image Planes" "UI:" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 18 0 1 1 1 1 1 + 1 0 0 0 0 0 0 0 0 0 0 0 ; +select -ne :defaultHardwareRenderGlobals; + setAttr -k on ".cch"; + setAttr -k on ".nds"; + setAttr ".fn" -type "string" "im"; + setAttr ".res" -type "string" "ntsc_4d 646 485 1.333"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +// End of test_pose_attributes.ma diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_pose.pose b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_pose.pose new file mode 100644 index 0000000..e11829e --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_pose.pose @@ -0,0 +1,151 @@ +{ + "metadata": { + "mayaSceneFile": "C:/Users/hovel/Dropbox/git/site-packages/studiolibrary/packages/mutils/tests/data/test_pose.ma", + "version": "1.0.0", + "user": "Hovel", + "mayaVersion": "2017", + "ctime": "1518341544" + } +, + "objects": { + "srcSphere:offset": { + "attrs": {} + }, + "srcSphere:sphere": { + "attrs": { + "testInteger": { + "type": "long", + "value": 5 + }, + "testProxy": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 1.5 + }, + "testLimit": { + "type": "double", + "value": 10.0 + }, + "testConnect": { + "type": "double", + "value": 8.0 + }, + "testEnum": { + "type": "enum", + "value": 1 + }, + "scaleX": { + "type": "double", + "value": 0.25 + }, + "testString": { + "type": "string", + "value": "Hello world" + }, + "scaleZ": { + "type": "double", + "value": 0.5 + }, + "rotateX": { + "type": "doubleAngle", + "value": 45.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 25.0 + }, + "rotateZ": { + "type": "doubleAngle", + "value": 90.0 + }, + "translateX": { + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "type": "doubleLinear", + "value": 8.0 + }, + "translateZ": { + "type": "doubleLinear", + "value": -12.0 + }, + "visibility": { + "type": "bool", + "value": true + }, + "testFloat": { + "type": "double", + "value": 0.666 + }, + "testAnimated": { + "type": "double", + "value": 0.0 + }, + "testVectorX": { + "type": "double", + "value": 0.2 + }, + "testVectorY": { + "type": "double", + "value": 1.4 + }, + "testVectorZ": { + "type": "double", + "value": 2.6 + }, + "testBoolean": { + "type": "bool", + "value": true + } + } + }, + "srcSphere:lockedNode": { + "attrs": { + "translateX": { + "type": "doubleLinear", + "value": 0.0 + }, + "translateY": { + "type": "doubleLinear", + "value": 0.0 + }, + "translateZ": { + "type": "doubleLinear", + "value": 0.0 + }, + "scaleX": { + "type": "double", + "value": 1.0 + }, + "scaleY": { + "type": "double", + "value": 1.0 + }, + "visibility": { + "type": "bool", + "value": true + }, + "rotateX": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateY": { + "type": "doubleAngle", + "value": 0.0 + }, + "rotateZ": { + "type": "doubleAngle", + "value": 0.0 + }, + "scaleZ": { + "type": "double", + "value": 1.0 + } + } + } + } +} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_poseplugin.pose/.studiolibrary/record.dict b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_poseplugin.pose/.studiolibrary/record.dict new file mode 100644 index 0000000..709c5a9 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/data/test_poseplugin.pose/.studiolibrary/record.dict @@ -0,0 +1 @@ +{'owner': 'hovel', 'ctime': '1437148163', 'mtime': '1437148163'} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/run.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/run.py new file mode 100644 index 0000000..71cf724 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/run.py @@ -0,0 +1,75 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +# Example: +# RUN TEST SUITE +import mutils.tests +reload(mutils.tests) +mutils.tests.run() +""" +import unittest + +import logging + + +logging.basicConfig( + filemode='w', + level=logging.DEBUG, + format='%(levelname)s: %(funcName)s: %(message)s', +) + + +def testSuite(): + """ + Return a test suite containing all the tests. + + :rtype: unittest.TestSuite + """ + import test_pose + import test_anim + import test_match + import test_utils + import test_attribute + import test_mirrortable + + suite = unittest.TestSuite() + + s = unittest.makeSuite(test_pose.TestPose, 'test') + suite.addTest(s) + + s = unittest.makeSuite(test_anim.TestAnim, 'test') + suite.addTest(s) + + s = unittest.makeSuite(test_utils.TestUtils, 'test') + suite.addTest(s) + + s = unittest.makeSuite(test_match.TestMatch, 'test') + suite.addTest(s) + + s = unittest.makeSuite(test_attribute.TestAttribute, 'test') + suite.addTest(s) + + s = unittest.makeSuite(test_mirrortable.TestMirrorTable, 'test') + suite.addTest(s) + + return suite + + +def run(): + """ + Call from within Maya to run all valid tests. + """ + import mutils.animation + mutils.animation.FIX_SAVE_ANIM_REFERENCE_LOCKED_ERROR = True + + tests = unittest.TextTestRunner() + tests.run(testSuite()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_anim.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_anim.py new file mode 100644 index 0000000..0d6f54a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_anim.py @@ -0,0 +1,125 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import unittest + +import mutils + +import test_base + + +class TestAnim(test_base.TestBase): + + def setUp(self): + """ + """ + + def save(self, bakeConnected=False): + """ + Test saving the animation to disc. + """ + self.open() + anim = mutils.Animation.fromObjects(self.srcObjects) + anim.save(self.dstPath, bakeConnected=bakeConnected) + + # def test_older_version(self): + # """ + # Test animation parser for an older animation format + # """ + # srcPath = self.dataPath("test_older_version.anim") + # a = mutils.Animation.fromPath(srcPath) + + def test_load_replace_completely(self): + """ + Test loading the animation with replace completely option. + """ + self.srcPath = self.dataPath("test_anim.ma") + self.dstPath = self.dataPath("test_load_replace_completely.anim") + self.save() + + anim = mutils.Animation.fromPath(self.dstPath) + anim.load(self.dstObjects) + + self.assertEqualAnimation() + + def test_bake_connected(self): + """ + Test saving animation with the option bake connected. + """ + srcPath = self.dataPath("test_bake_connected.ma") + dstPath = self.dataPath("test_bake_connected.anim") + + srcObjects = [ + "srcSphere:group", + "srcSphere:lockedNode", + "srcSphere:offset", + "srcSphere:sphere" + ] + + dstObjects = [ + "dstSphere:group", + "dstSphere:lockedNode", + "dstSphere:offset", + "dstSphere:sphere" + ] + + self.open(path=srcPath) + + anim = mutils.Animation.fromObjects(srcObjects) + anim.save(dstPath, bakeConnected=True) + + anim = mutils.Animation.fromPath(dstPath) + anim.load(dstObjects) + + self.assertEqualAnimation() + + def test_load_replace(self): + """ + Test loading the animation with the option Replace. + """ + self.srcPath = self.dataPath("test_anim.ma") + self.dstPath = self.dataPath("test_load_replace.anim") + self.save() + + anim = mutils.Animation.fromPath(self.dstPath) + anim.load(self.dstObjects, option=mutils.PasteOption.Replace, startFrame=5) + + def test_load_insert(self): + """ + Test loading the animation with the option Insert. + """ + self.srcPath = self.dataPath("test_anim.ma") + self.dstPath = self.dataPath("test_load_insert.anim") + self.save() + + anim = mutils.Animation.fromPath(self.dstPath) + anim.load(self.dstObjects, option=mutils.PasteOption.Insert, startFrame=5) + + +def testSuite(): + """ + Return the test suite for the test case. + + :rtype: unittest.TestSuite + """ + suite = unittest.TestSuite() + s = unittest.makeSuite(TestAnim, 'test') + suite.addTest(s) + return suite + + +def run(): + """ + Call from within Maya to run all valid tests. + """ + tests = unittest.TextTestRunner() + tests.run(testSuite()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_attribute.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_attribute.py new file mode 100644 index 0000000..be3090d --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_attribute.py @@ -0,0 +1,168 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +# Example: +import mutils.tests.test_attribute +reload(mutils.tests.test_attribute) +mutils.tests.test_attribute.run() +""" +import os +import unittest + +import maya.cmds + +import mutils + + +class TestAttribute(unittest.TestCase): + + def setUp(self): + """ + Open an existing maya test scene for testing. + """ + dirname = os.path.dirname(mutils.__file__) + dirname = os.path.join(dirname, "tests", "data") + path = os.path.join(dirname, "sphere.ma") + + maya.cmds.file( + path, + open=True, + force=True, + ignoreVersion=True, + executeScriptNodes=False, + ) + + def test_attribute_limit(self): + """ + Test the attribute limit when setting the attribute value. + """ + range_ = (-100, 100) + maya.cmds.cutKey("sphere", cl=True, time=range_, f=range_, at="testLimit") + + attr = mutils.Attribute("sphere", "testLimit") + attr.set(200) + + value = maya.cmds.getAttr("sphere.testLimit") + assert value == 10, "Maximum attibute limit was ignored when setting the attribute value" + + def test_attribute_limit2(self): + """ + Test the maximum attribute limit when setting a keyframe. + """ + attr = mutils.Attribute("sphere", "testLimit") + attr.setKeyframe(200) + + value = maya.cmds.keyframe("sphere.testLimit", query=True, eval=True)[0] + assert value == 10, "Maximum attibute limit was ignored when setting animation keyframe" + + def test_attribute_limit3(self): + """ + Test the minimum attribute limit when setting a keyframe. + """ + attr = mutils.Attribute("sphere", "testLimit") + attr.setKeyframe(-200) + + value = maya.cmds.keyframe("sphere.testLimit", query=True, eval=True)[0] + assert value == -10, "Minimum attibute limit was ignored when setting animation keyframe" + + def test_non_keyable(self): + """ + Test if non-keyable attributes can be keyed. + """ + range_ = (-100, 100) + maya.cmds.cutKey("sphere", cl=True, time=range_, f=range_, at="testNonKeyable") + + attr = mutils.Attribute("sphere", "testNonKeyable") + attr.setKeyframe(200) + + value = maya.cmds.keyframe("sphere.testNonKeyable", query=True, eval=True) + assert value is None, "Non keyable attribute was keyed" + + def test_anim_curve(self): + """ + Test if get anim curve returns the right value. + """ + msg = "Incorrect anim curve was returned when using attr.animCurve " + + attr = mutils.Attribute("sphere", "testFloat") + curve = attr.animCurve() + assert curve is None, msg + "1" + + attr = mutils.Attribute("sphere", "testConnected") + curve = attr.animCurve() + assert curve is None, msg + "2" + + attr = mutils.Attribute("sphere", "testAnimated") + curve = attr.animCurve() + assert curve == "sphere_testAnimated", msg + "3" + + def test_set_anim_curve(self): + """ + Test if set anim curve + """ + msg = "No anim curve was set" + + attr = mutils.Attribute("sphere", "testAnimated") + srcCurve = attr.animCurve() + + attr = mutils.Attribute("sphere", "testFloat") + attr.setAnimCurve(srcCurve, time=(1, 15), option="replace") + curve = attr.animCurve() + assert curve is not None, msg + + attr = mutils.Attribute("sphere", "testFloat") + attr.setAnimCurve(srcCurve, time=(15, 15), option="replaceCompletely") + curve = attr.animCurve() + assert curve is not None, msg + + def test_set_static_keyframe(self): + """ + Test set static keyframes + """ + msg = "The inserted static keys have different values" + + attr = mutils.Attribute("sphere", "testAnimated", cache=False) + attr.setStaticKeyframe(value=2, time=(4, 6), option="replace") + + maya.cmds.currentTime(4) + value1 = attr.value() + + maya.cmds.currentTime(6) + value2 = attr.value() + + assert value1 == value2, msg + + +def testSuite(): + """ + Return the test suite for the TestAttribute. + + :rtype: unittest.TestSuite + """ + suite = unittest.TestSuite() + s = unittest.makeSuite(TestAttribute, 'test') + suite.addTest(s) + return suite + + +def run(): + """ + Call from within Maya to run all valid tests. + + Example: + + import mutils.tests.test_attribute + reload(mutils.tests.test_attribute) + mutils.tests.test_attribute.run() + """ + tests = unittest.TextTestRunner() + tests.run(testSuite()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_base.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_base.py new file mode 100644 index 0000000..e807d2d --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_base.py @@ -0,0 +1,143 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import unittest + +import maya.cmds + +import mutils + + +TEST_DATA_DIR = os.path.join(os.path.dirname(mutils.__file__), "tests", "data") + + +class TestBase(unittest.TestCase): + + def __init__(self, *args): + """ + :type args: list + """ + unittest.TestCase.__init__(self, *args) + + self.srcPath = os.path.join(TEST_DATA_DIR, "test_pose.ma") + self.dstPath = os.path.join(TEST_DATA_DIR, "test_pose.pose") + + self.srcObjects = [ + "srcSphere:lockedNode", + "srcSphere:offset", + "srcSphere:sphere", + ] + + self.dstObjects = [ + "dstSphere:lockedNode", + "dstSphere:offset", + "dstSphere:sphere", + ] + + self.srcNamespaces = ["srcSphere"] + self.dstNamespaces = ["dstSphere"] + + def dataDir(self): + """ + Return the location on disc to the test data. + + :rtype: str + """ + return os.path.join(os.path.dirname(mutils.__file__), "tests", "data") + + def dataPath(self, fileName): + """ + Return data location with the given fileName. + + :rtype: str + """ + return os.path.join(self.dataDir(), fileName) + + def open(self, path=None): + """ + Open the specified file in Maya. + + :type path: str | None + """ + if path is None: + path = self.srcPath + + maya.cmds.file( + path, + open=True, + force=True, + ignoreVersion=True, + executeScriptNodes=False, + ) + + def listAttr(self, srcObjects=None, dstObjects=None): + """ + Return the source & destination attributes for the given objects. + + :rtype: list[(mutils.Attribute, mutils.Attribute)] + """ + attrs = [] + srcObjects = srcObjects or self.srcObjects + dstObjects = dstObjects or self.dstObjects + + for i, srcObj in enumerate(srcObjects): + srcObj = srcObjects[i] + dstObj = dstObjects[i] + + srcAttrs = maya.cmds.listAttr(srcObj, keyable=True, unlocked=True, scalar=True) or [] + + for srcAttr in srcAttrs: + srcAttribute = mutils.Attribute(srcObj, srcAttr) + dstAttribute = mutils.Attribute(dstObj, srcAttr) + attrs.append((srcAttribute, dstAttribute)) + + return attrs + + def assertEqualAnimation( + self, + srcObjects=None, + dstObjects=None, + ): + """ + Test that the animation for the given objects is equal. + + If the animation curves do not compare equal, the test will fail. + + :type srcObjects: list[str] | None + :type dstObjects: list[str] | None + """ + for frame in [1, 10, 24]: + maya.cmds.currentTime(frame) + self.assertEqualAttributeValues(srcObjects, dstObjects) + + def assertEqualAttributeValues( + self, + srcObjects=None, + dstObjects=None, + ): + """ + Test that the attribute values for the given objects are equal. + + If the values do not compare equal, the test will fail. + + :type srcObjects: list[str] | None + :type dstObjects: list[str] | None + """ + for srcAttribute, dstAttribute in self.listAttr(srcObjects, dstObjects): + + if not dstAttribute.exists(): + continue + + msg = "Attribute value is not equal! {0} != {1}" + msg = msg.format(srcAttribute.fullname(), dstAttribute.fullname()) + self.assertEqual(srcAttribute.value(), dstAttribute.value(), msg) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_match.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_match.py new file mode 100644 index 0000000..1405071 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_match.py @@ -0,0 +1,230 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import mutils +import test_base + + +class TestMatch(test_base.TestBase): + + def setUp(self): + """ + """ + pass + + def matchNames(self, expectedResult, srcObjects=None, dstObjects=None, dstNamespaces=None): + """ + """ + result = [] + for srcNode, dstNode in mutils.matchNames(srcObjects, dstObjects=dstObjects, dstNamespaces=dstNamespaces): + result.append((srcNode.name(), dstNode.name())) + + if result != expectedResult: + raise Exception("Result does not match the expected result: %s != %s" % (str(result), expectedResult)) + + def test_match0(self): + """ + Test no matches + """ + srcObjects = ["control2", "control1", "control3"] + dstObjects = ["control4", "control5", "control6"] + expectedResult = [] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match1(self): + """ + Test simple match + """ + srcObjects = ["control2", "control1", "control3"] + dstObjects = ["control1", "control2", "control3"] + expectedResult = [("control2", "control2"), + ("control1", "control1"), + ("control3", "control3")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match2(self): + """ + """ + srcObjects = ["control1"] + dstObjects = ["character1:control1", "character2:control1"] + expectedResult = [("control1", "character1:control1"), + ("control1", "character2:control1")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match3(self): + """ + """ + srcObjects = ["control1"] + dstNamespaces = ["character1", "character2"] + expectedResult = [("control1", "character1:control1"), + ("control1", "character2:control1")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces) + + def test_match4(self): + """ + """ + srcObjects = ["character1:control1"] + dstNamespaces = [""] + expectedResult = [("character1:control1", "control1")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces) + + def test_match5(self): + """ + Test namespace + Test short name + Test multiple namespaces in source objects + """ + srcObjects = ["character1:control1", "character1:control2"] + dstNamespaces = ["character2"] + expectedResult = [("character1:control1", "character2:control1"), + ("character1:control2", "character2:control2")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces) + + def test_match6(self): + """ + Test namespace + Test long name + Test namespace in source objects + Test namespace that is not in source objects + """ + srcObjects = ["character1:group1|character1:control1", "character1:group2|character1:control1"] + dstNamespaces = ["character2"] + expectedResult = [("character1:group1|character1:control1", "character2:group1|character2:control1"), + ("character1:group2|character1:control1", "character2:group2|character2:control1")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces) + + def test_match7(self): + """ + Test namespace + Test multiple namespaces in source objects + Test only one destination namespace + """ + srcObjects = ["character1:control1", "character2:control1"] + dstNamespaces = ["character2"] + expectedResult = [("character2:control1", "character2:control1")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces) + + def test_match8(self): + """ + Test multiple namespaces in source objects + Test namespace that is not in source objects + """ + srcObjects = ["character1:control1", "character2:control1"] + dstNamespaces = ["character3"] + expectedResult = [("character1:control1", "character3:control1")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces) + + def test_match9(self): + """ + """ + srcObjects = ["character1:group1|character1:control1", + "character1:group1|character1:control2"] + dstObjects = ["group1|control1", + "group1|control2"] + expectedResult = [("character1:group1|character1:control1", "group1|control1"), + ("character1:group1|character1:control2", "group1|control2")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match10(self): + """ + WARNING: The expected result is a little strange. + It will always match source objects without a namespace first. + expectedResult = [("group1|control1", "character2:group1|character2:control1")] + NOT + expectedResult = [("character1:group1|character1:control1", "character2:group1|character2:control1")] + """ + srcObjects = ["character1:group1|character1:control1", + "group1|control1"] + dstNamespaces = ["character2"] + expectedResult = [("group1|control1", "character2:group1|character2:control1")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstNamespaces=dstNamespaces) + + def test_match11(self): + """ + Match long name to short name. + """ + srcObjects = ["|grpEyeAllLf|grpLidTpLf|ctlLidTpLf"] + dstObjects = ["ctlLidTpLf"] + + expectedResult = [("|grpEyeAllLf|grpLidTpLf|ctlLidTpLf", "ctlLidTpLf")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match12(self): + """ + Match short name to long name. + """ + srcObjects = ["ctlLidTpLf"] + dstObjects = ["|grpEyeAllLf|grpLidTpLf|ctlLidTpLf"] + + expectedResult = [("ctlLidTpLf", "|grpEyeAllLf|grpLidTpLf|ctlLidTpLf")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match13(self): + """ + Match short name to long name with namespace. + """ + srcObjects = ["ctlLidTpLf"] + dstObjects = ["|malcolm:grpEyeAllLf|malcolm:grpLidTpLf|malcolm:ctlLidTpLf"] + + expectedResult = [("ctlLidTpLf", "|malcolm:grpEyeAllLf|malcolm:grpLidTpLf|malcolm:ctlLidTpLf")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match14(self): + """ + Match long name to short name with namespace. + """ + srcObjects = ["|malcolm:grpEyeAllLf|malcolm:grpLidTpLf|malcolm:ctlLidTpLf"] + dstObjects = ["ctlLidTpLf"] + + expectedResult = [("|malcolm:grpEyeAllLf|malcolm:grpLidTpLf|malcolm:ctlLidTpLf", "ctlLidTpLf")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match15(self): + """ + Testing multiple source namespace to only one destination namespace. They should not merge. + """ + srcObjects = ["character1:group1|character1:control1", + "character2:group1|character2:control2"] + dstObjects = ["group1|control1", + "group1|control2"] + expectedResult = [("character1:group1|character1:control1", "group1|control1")] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match16(self): + """ + Testing multiple source namespace and destination namespaces + """ + srcObjects = ["character1:group1|character1:control1", + "character2:group1|character2:control1", + "character3:group1|character3:control1"] + dstObjects = ["character3:group1|character3:control1", + "character1:group1|character1:control1", + "character2:group1|character2:control1"] + expectedResult = [('character1:group1|character1:control1', 'character1:group1|character1:control1'), + ('character3:group1|character3:control1', 'character3:group1|character3:control1'), + ('character2:group1|character2:control1', 'character2:group1|character2:control1')] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) + + def test_match17(self): + """ + Testing multiple source namespace and destination namespaces. + """ + srcObjects = ["character1:group1|character1:control1", + "group1|control1", + "character3:group1|character3:control1"] + dstObjects = ["character3:group1|character3:control1", + "character1:group1|character1:control1", + "group1|control1"] + expectedResult = [('group1|control1', 'group1|control1'), + ('character1:group1|character1:control1', 'character1:group1|character1:control1'), + ('character3:group1|character3:control1', 'character3:group1|character3:control1')] + self.matchNames(expectedResult, srcObjects=srcObjects, dstObjects=dstObjects) \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_mirrortable.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_mirrortable.py new file mode 100644 index 0000000..f7ab2fd --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_mirrortable.py @@ -0,0 +1,238 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import unittest + +from mutils.mirrortable import MirrorTable + + +class TestMirrorTable(unittest.TestCase): + + def test_find_left_side(self): + """ + Test the clamp range command + """ + msg = "Cannot find the left side from the given objects" + + objects = ["Character3_Ctrl_LeftForeArm"] + assert "Left" == MirrorTable.findLeftSide(objects), msg + + objects = ["r_cool_ik", "l_arm_cool_l"] + assert "l_*" == MirrorTable.findLeftSide(objects), msg + + objects = ["r_cool_ik", "Character:l_arm_cool_ik"] + assert "l_*" == MirrorTable.findLeftSide(objects), msg + + objects = ["r_cool_ik", "Group|l_arm_cool_ik"] + assert "l_*" == MirrorTable.findLeftSide(objects), msg + + objects = ["r_cool_ik", "Group|arm_cool_l"] + assert "*_l" == MirrorTable.findLeftSide(objects), msg + + objects = ["leftArm1_ArmCon"] + assert "left*" == MirrorTable.findLeftSide(objects), msg + + objects = ["LLegCON", "LhandCON"] + assert "L*" == MirrorTable.findLeftSide(objects), msg + + objects = ["r_cool_ik", "Group|left_arm_cool_ik"] + assert "left*" == MirrorTable.findLeftSide(objects), msg + + objects = ["r_cool_ik", "Group|ctlHandLf"] + assert "*Lf" == MirrorTable.findLeftSide(objects), msg + + objects = ["r_cool_ik", "malcolm:ctlArmIkLf"] + assert "*Lf" == MirrorTable.findLeftSide(objects), msg + + objects = ["r_cool_ik", "IKExtraLegFront_L|IKLegFront_L"] + assert "*_L" == MirrorTable.findLeftSide(objects), msg + + def test_find_right_side(self): + """ + Test the clamp range command + """ + msg = "Cannot find the right side from the given objects" + + objects = ["Character3_Ctrl_RightForeArm"] + assert "Right" == MirrorTable.findRightSide(objects), msg + + objects = ["l_car_ik", "r_arm_car_r"] + assert "r_*" == MirrorTable.findRightSide(objects), msg + + objects = ["l_car_ik", "Character:r_arm_car_r"] + assert "r_*" == MirrorTable.findRightSide(objects), msg + + objects = ["l_car_ik", "Group|r_arm_car_r"] + assert "r_*" == MirrorTable.findRightSide(objects), msg + + objects = ["l_car_ik", "arm_car_r"] + assert "*_r" == MirrorTable.findRightSide(objects), msg + + objects = ["l_car_ik", "Group|right_arm_car_ik"] + assert "right*" == MirrorTable.findRightSide(objects), msg + + objects = ["CHR1:RIG:RLegCON", "CHR1:RIG:RhandCON"] + assert "R*" == MirrorTable.findRightSide(objects), msg + + objects = ["RLegCON", "RhandCON"] + assert "R*" == MirrorTable.findRightSide(objects), msg + + objects = ["l_car_ik", "Group|ctlHandRt"] + assert "*Rt" == MirrorTable.findRightSide(objects), msg + + objects = ["l_car_ik", "malcolm:ctlArmIkRt"] + assert "*Rt" == MirrorTable.findRightSide(objects), msg + + objects = ["l_car_ik", "IKExtraLegFront_R|IKLegFront_R"] + assert "*_R" == MirrorTable.findRightSide(objects), msg + + objects = ["Rig_v01_ref:Rig_v01:leftArm1_UpperArmControl"] + assert "" == MirrorTable.findRightSide(objects), msg + + def test_match_side(self): + + msg = "Incorrect result from match side" + + result = MirrorTable.matchSide("ctlArmIkRt", "*Rt") + assert result is True, msg + + result = MirrorTable.matchSide("ctlArmIkRt", "Rt") + assert result is True, msg + + result = MirrorTable.matchSide("CHR1:RIG:LRollCON", "L*") + assert result is True, msg + + # This is no longer supported! + # result = MirrorTable.matchSide("CHR1:RIG:LRollCON", "RIG:L*") + # assert result is True, msg + + result = MirrorTable.matchSide("Group|right_arm_car_ik", "right*") + assert result is True, msg + + result = MirrorTable.matchSide("Group|IKLegFront_R", "*_R") + assert result is True, msg + + def test_mirror_object(self): + + msg = "Incorrect mirror name for object" + + result = MirrorTable._mirrorObject("malcolm:ctlArmIkRt", "Rt", "Lf") + assert "malcolm:ctlArmIkLf" == result, msg + + result = MirrorTable._mirrorObject("malcolm:ctlArmIkRt", "*Rt", "*Lf") + assert "malcolm:ctlArmIkLf" == result, msg + + result = MirrorTable._mirrorObject("IKLegFront_R", "*_R", "*_L") + assert "IKLegFront_L" == result, msg + + result = MirrorTable._mirrorObject("CHR1:RIG:RLegCON", "R*", "L*") + assert "CHR1:RIG:LLegCON" == result, msg + + result = MirrorTable._mirrorObject("CHR1:RIG:RRollCON", "R*", "L*") + assert "CHR1:RIG:LRollCON" == result, msg + + result = MirrorTable._mirrorObject("leftArm1_ArmCon", "left*", "right*") + assert "rightArm1_ArmCon" == result, msg + + result = MirrorTable._mirrorObject("Rig:RArm1_UpperArmControl", "R*", "L*") + assert "Rig:LArm1_UpperArmControl" == result, msg + + result = MirrorTable._mirrorObject("Group|Ch1:RIG:Offset|Ch1:RIG:RRoll", "R*", "L*") + assert "Group|Ch1:RIG:Offset|Ch1:RIG:LRoll" == result, msg + + # This is no longer supported! + # result = MirrorTable._mirrorObject("Group|Ch1:RIG:RExtra|Ch1:RIG:RRoll", "RIG:R", "RIG:L") + # assert "Group|Ch1:RIG:LExtra|Ch1:RIG:LRoll" == result, msg + + result = MirrorTable._mirrorObject("Group|Ch1:RIG:RExtra|Ch1:RIG:RRoll", "R*", "L*") + assert "Group|Ch1:RIG:LExtra|Ch1:RIG:LRoll" == result, msg + + result = MirrorTable._mirrorObject("hand_R0_ctl", "_R", "_L") + assert "hand_L0_ctl" == result, msg + + result = MirrorTable._mirrorObject("Lyle_R001:hand_R0_ctl", "_R", "_L") + assert "Lyle_R001:hand_L0_ctl" == result, msg + + result = MirrorTable._mirrorObject("Lyle_R001:other_R0_ctl|Lyle_R001:hand_R0_ctl", "_R", "_L") + assert "Lyle_R001:other_L0_ctl|Lyle_R001:hand_L0_ctl" == result, msg + + result = MirrorTable._mirrorObject("Character1:LfootRoll", "L*", "R*") + assert "Character1:RfootRoll" == result, msg + + result = MirrorTable._mirrorObject("Group|LyleCharacter1:LfootRollExtra|LyleCharacter1:LfootRoll", "R*", "L*") + assert "Group|LyleCharacter1:RfootRollExtra|LyleCharacter1:RfootRoll" == result, msg + + result = MirrorTable._mirrorObject("Character3_Ctrl_RightForeArm", "Right", "Left") + assert "Character3_Ctrl_LeftForeArm" == result, msg + + result = MirrorTable._mirrorObject("r_arm_car_r", "r_*", "l_*") + assert "l_arm_car_r" == result, msg + + result = MirrorTable._mirrorObject("Character:r_arm_car_r", "r_*", "l_*") + assert "Character:l_arm_car_r" == result, msg + + result = MirrorTable._mirrorObject("Group|r_arm_car_r", "r_*", "l_*") + assert "Group|l_arm_car_r" == result, msg + + result = MirrorTable._mirrorObject("arm_car_r", "*_r", "*_l") + assert "arm_car_l" == result, msg + + result = MirrorTable._mirrorObject("Group|right_arm_car_ik", "right*", "left*") + assert "Group|left_arm_car_ik" == result, msg + + result = MirrorTable._mirrorObject("CHR1:RIG:RLegCON", "R*", "L*") + assert "CHR1:RIG:LLegCON" == result, msg + + result = MirrorTable._mirrorObject("RhandCON", "R*", "L*") + assert "LhandCON" == result, msg + + result = MirrorTable._mirrorObject("Group|ctlHandRt", "*Rt", "*Lt") + assert "Group|ctlHandLt" == result, msg + + result = MirrorTable._mirrorObject("malcolm:ctlArmIkRt", "*Rt", "*Lt") + assert "malcolm:ctlArmIkLt" == result, msg + + result = MirrorTable._mirrorObject("IKExtraLegFront_R|IKLegFront_R", "*_R", "*_L") + assert "IKExtraLegFront_L|IKLegFront_L" == result, msg + + result = MirrorTable._mirrorObject("Rig_v01_ref:Rig_v01:leftArm1_UpperArmControl", "_R", "_L") + assert None == result, msg + + +def testSuite(): + """ + Return the test suite for this module. + + :rtype: unittest.TestSuite + """ + suite = unittest.TestSuite() + s = unittest.makeSuite(TestMirrorTable, 'test') + suite.addTest(s) + return suite + + +def run(): + """ + Call from within Maya to run all valid tests. + + Example: + + import mutils.tests.test_attribute + reload(mutils.tests.test_attribute) + mutils.tests.test_attribute.run() + """ + tests = unittest.TextTestRunner() + tests.run(testSuite()) + + +if __name__ == "__main__": + run() diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_pose.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_pose.py new file mode 100644 index 0000000..3919b76 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_pose.py @@ -0,0 +1,157 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +# Example: +import mutils.tests.test_pose +reload(mutils.tests.test_pose) +mutils.tests.test_pose.run() +""" +import unittest + +import maya.cmds + +import mutils +import test_base + + +class TestPose(test_base.TestBase): + + def setUp(self): + """ + """ + self.srcPath = self.dataPath("test_pose.ma") + self.dstPath = self.dataPath("test_pose.pose") + + def test_save(self): + """ + Test saving a pose to disc. + """ + self.open() + pose = mutils.Pose.fromObjects(self.srcObjects) + pose.save(self.dstPath) + + def test_load(self): + """ + Test load the pose from disc. + """ + self.open() + pose = mutils.Pose.fromPath(self.dstPath) + pose.load(self.dstObjects) + self.assertEqualAttributeValues() + + def test_older_version(self): + """ + Test parsing an older pose format + """ + srcPath = self.dataPath("test_older_version.dict") + + pose = mutils.Pose.fromPath(srcPath) + print(pose.objects()) + + def test_non_unique_names(self): + """ + Test loading a pose to objects that do not have unique names. + """ + srcPath = self.dataPath("test_non_unique_names.ma") + dstPath = self.dataPath("test_non_unique_names.pose") + + srcObjects = [ + "srcSphere:offset", + "srcSphere:lockedNode", + "srcSphere:sphere", + ] + + dstObjects = [ + 'group|offset', + 'group|offset|lockedNode', + 'group|offset|lockedNode|sphere', + ] + + self.open(path=srcPath) + + pose = mutils.Pose.fromObjects(srcObjects) + pose.save(dstPath) + + pose = mutils.Pose.fromPath(dstPath) + pose.load(dstObjects) + + self.assertEqualAttributeValues(srcObjects, dstObjects) + + def test_blend(self): + """ + Test pose blending for float values when loading a pose. + """ + self.open() + + for blend in [10, 30, 70, 90]: + dstObjects = {} + for srcAttribute, dstAttribute in self.listAttr(): + if srcAttribute.type == "float": + values = (srcAttribute.value(), dstAttribute.value()) + dstObjects[dstAttribute.fullname()] = values + + pose = mutils.Pose.fromPath(self.dstPath) + pose.load(self.dstObjects, blend=blend) + + for dstFullname in dstObjects.keys(): + srcValue, dstValue = dstObjects[dstFullname] + + value = (srcValue - dstValue) * (blend/100.00) + value = dstValue + value + + dstValue = maya.cmds.getAttr(dstFullname) + + msg = 'Incorrect value for {0} {1} != {2}' + msg = msg.format(dstFullname, value, dstValue) + self.assertEqual(value, maya.cmds.getAttr(dstFullname), msg) + + def test_select(self): + """ + Test selecting the controls from the pose. + """ + self.open() + + pose = mutils.Pose.fromPath(self.dstPath) + pose.select(namespaces=self.dstNamespaces) + + selection = maya.cmds.ls(selection=True) + for dstName in self.dstObjects: + msg = "Did not select {0}".format(dstName) + self.assertIn(dstName, selection, msg) + + def test_count(self): + """ + Test the object count within in pose. + """ + self.open() + pose = mutils.Pose.fromPath(self.dstPath) + self.assertEqual(pose.objectCount(), len(self.srcObjects)) + + +def testSuite(): + """ + Return the test suite for the test case. + + :rtype: unittest.TestSuite + """ + suite = unittest.TestSuite() + s = unittest.makeSuite(TestPose, 'test') + suite.addTest(s) + return suite + + +def run(): + """ + Call from within Maya to run all valid tests. + """ + tests = unittest.TextTestRunner() + tests.run(testSuite()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_utils.py b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_utils.py new file mode 100644 index 0000000..2498c7c --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/tests/test_utils.py @@ -0,0 +1,72 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import unittest + +import mutils.animation + + +class TestUtils(unittest.TestCase): + + def test_clamp_range(self): + """ + Test the clamp range command + """ + msg = "Incorrect clamp range" + + # Test clamp range on both min and max + clampRange = mutils.animation.clampRange((15, 35), (20, 30)) + assert (20, 30) == clampRange, msg + + # Test clamp range on min time + clampRange = mutils.animation.clampRange((10, 25), (20, 30)) + assert (20, 25) == clampRange, msg + + # Test clamp range on man time + clampRange = mutils.animation.clampRange((25, 40), (20, 30)) + assert (25, 30) == clampRange, msg + + # Test min out of bounds error + def test_exception(): + clampRange = mutils.animation.clampRange((5, 15), (20, 30)) + self.assertRaises(mutils.animation.OutOfBoundsError, test_exception) + + # Test max out of bounds error + def test_exception(): + clampRange = mutils.animation.clampRange((65, 95), (20, 30)) + self.assertRaises(mutils.animation.OutOfBoundsError, test_exception) + + +def testSuite(): + """ + Return the test suite for this module. + + :rtype: unittest.TestSuite + """ + suite = unittest.TestSuite() + s = unittest.makeSuite(TestUtils, 'test') + suite.addTest(s) + return suite + + +def run(): + """ + Call from within Maya to run all valid tests. + + Example: + + import mutils.tests.test_attribute + reload(mutils.tests.test_attribute) + mutils.tests.test_attribute.run() + """ + tests = unittest.TextTestRunner() + tests.run(testSuite()) diff --git a/2023/scripts/animation_tools/studiolibrary/mutils/transferobject.py b/2023/scripts/animation_tools/studiolibrary/mutils/transferobject.py new file mode 100644 index 0000000..a849340 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/mutils/transferobject.py @@ -0,0 +1,403 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +Base object for saving poses, animation, selection sets and mirror tables. + +Example: + import mutils + + t = mutils.TransferObject.fromPath("/tmp/pose.json") + t = mutils.TransferObject.fromObjects(["object1", "object2"]) + + t.load(selection=True) + t.load(objects=["obj1", "obj2"]) + t.load(namespaces=["namespace1", "namespace2"]) + + t.save("/tmp/pose.json") + t.read("/tmp/pose.json") +""" +import os +import abc +import json +import time +import locale +import getpass +import logging + +from studiovendor import six + +import mutils + +try: + import maya.cmds +except Exception: + import traceback + traceback.print_exc() + + +logger = logging.getLogger(__name__) + + +class TransferObject(object): + + @classmethod + def fromPath(cls, path): + """ + Return a new transfer instance for the given path. + + :type path: str + :rtype: TransferObject + """ + t = cls() + t.setPath(path) + t.read() + return t + + @classmethod + def fromObjects(cls, objects, **kwargs): + """ + Return a new transfer instance for the given objects. + + :type objects: list[str] + :rtype: TransferObject + """ + t = cls(**kwargs) + for obj in objects: + t.add(obj) + return t + + @staticmethod + def readJson(path): + """ + Read the given json path + + :type path: str + :rtype: dict + """ + with open(path, "r") as f: + data = f.read() or "{}" + + data = json.loads(data) + + return data + + @staticmethod + def readList(path): + """ + Legacy method for reading older .list file type. + + :rtype: dict + """ + with open(path, "r") as f: + data = f.read() + + data = eval(data, {}) + result = {} + for obj in data: + result.setdefault(obj, {}) + + return {"objects": result} + + @staticmethod + def readDict(path): + """ + Legacy method for reading older .dict file type. + + :rtype: dict + """ + with open(path, "r") as f: + data = f.read() + + data = eval(data, {}) + result = {} + for obj in data: + result.setdefault(obj, {"attrs": {}}) + for attr in data[obj]: + typ, val = data[obj][attr] + result[obj]["attrs"][attr] = {"type": typ, "value": val} + + return {"objects": result} + + def __init__(self): + self._path = None + self._namespaces = None + self._data = {"metadata": {}, "objects": {}} + + def path(self): + """ + Return the disc location for the transfer object. + + :rtype: str + """ + return self._path + + def setPath(self, path): + """ + Set the disc location for loading and saving the transfer object. + + :type path: str + """ + dictPath = path.replace(".json", ".dict") + listPath = path.replace(".json", ".list") + + if not os.path.exists(path): + + if os.path.exists(dictPath): + path = dictPath + + elif os.path.exists(listPath): + path = listPath + + self._path = path + + def validate(self, **kwargs): + """ + Validate the given kwargs for the current IO object. + + :type kwargs: dict + """ + namespaces = kwargs.get("namespaces") + if namespaces is not None: + sceneNamespaces = mutils.namespace.getAll() + [":"] + for namespace in namespaces: + if namespace and namespace not in sceneNamespaces: + msg = 'The namespace "{0}" does not exist in the scene! ' \ + "Please choose a namespace which exists." + msg = msg.format(namespace) + raise ValueError(msg) + + def mtime(self): + """ + Return the modification datetime of self.path(). + + :rtype: float + """ + return os.path.getmtime(self.path()) + + def ctime(self): + """ + Return the creation datetime of self.path(). + + :rtype: float + """ + return os.path.getctime(self.path()) + + def data(self): + """ + Return all the data for the transfer object. + + :rtype: dict + """ + return self._data + + def setData(self, data): + """ + Set the data for the transfer object. + + :type data: + """ + self._data = data + + def owner(self): + """ + Return the user who created this item. + + :rtype: str + """ + return self.metadata().get("user", "") + + def description(self): + """ + Return the user description for this item. + + :rtype: str + """ + return self.metadata().get("description", "") + + def objects(self): + """ + Return all the object data. + + :rtype: dict + """ + return self.data().get("objects", {}) + + def object(self, name): + """ + Return the data for the given object name. + + :type name: str + :rtype: dict + """ + return self.objects().get(name, {}) + + def createObjectData(self, name): + """ + Create the object data for the given object name. + + :type name: str + :rtype: dict + """ + return {} + + def namespaces(self): + """ + Return the namespaces contained in the transfer object + + :rtype: list[str] + """ + if self._namespaces is None: + group = mutils.groupObjects(self.objects()) + self._namespaces = group.keys() + + return self._namespaces + + def objectCount(self): + """ + Return the number of objects in the transfer object. + + :rtype: int + """ + return len(self.objects() or []) + + def add(self, objects): + """ + Add the given objects to the transfer object. + + :type objects: str | list[str] + """ + if isinstance(objects, six.string_types): + objects = [objects] + + for name in objects: + self.objects()[name] = self.createObjectData(name) + + def remove(self, objects): + """ + Remove the given objects to the transfer object. + + :type objects: str | list[str] + """ + if isinstance(objects, six.string_types): + objects = [objects] + + for obj in objects: + del self.objects()[obj] + + def setMetadata(self, key, value): + """ + Set the given key and value in the metadata. + + :type key: str + :type value: int | str | float | dict + """ + self.data()["metadata"][key] = value + + def updateMetadata(self, metadata): + """ + Update the given key and value in the metadata. + + :type metadata: dict + """ + self.data()["metadata"].update(metadata) + + def metadata(self): + """ + Return the current metadata for the transfer object. + + Example: print(self.metadata()) + Result # { + "User": "", + "Scene": "", + "Reference": {"filename": "", "namespace": ""}, + "Description": "", + } + + :rtype: dict + """ + return self.data().get("metadata", {}) + + def read(self, path=""): + """ + Return the data from the path set on the Transfer object. + + :type path: str + :rtype: dict + """ + path = path or self.path() + + if path.endswith(".dict"): + data = self.readDict(path) + + elif path.endswith(".list"): + data = self.readList(path) + + else: + data = self.readJson(path) + + self.setData(data) + + @abc.abstractmethod + def load(self, *args, **kwargs): + pass + + @mutils.showWaitCursor + def save(self, path): + """ + Save the current metadata and object data to the given path. + + :type path: str + :rtype: None + """ + logger.info("Saving pose: %s" % path) + + user = getpass.getuser() + if user: + user = six.text_type(user) + + ctime = str(time.time()).split(".")[0] + references = mutils.getReferenceData(self.objects()) + + self.setMetadata("user", user) + self.setMetadata("ctime", ctime) + self.setMetadata("version", "1.0.0") + self.setMetadata("references", references) + self.setMetadata("mayaVersion", maya.cmds.about(v=True)) + self.setMetadata("mayaSceneFile", maya.cmds.file(q=True, sn=True)) + + # Move the metadata information to the top of the file + metadata = {"metadata": self.metadata()} + data = self.dump(metadata)[:-1] + "," + + # Move the objects information to after the metadata + objects = {"objects": self.objects()} + data += self.dump(objects)[1:] + + # Create the given directory if it doesn't exist + dirname = os.path.dirname(path) + if not os.path.exists(dirname): + os.makedirs(dirname) + + with open(path, "w") as f: + f.write(str(data)) + + logger.info("Saved pose: %s" % path) + + def dump(self, data=None): + """ + :type data: str | dict + :rtype: str + """ + if data is None: + data = self.data() + + return json.dumps(data, indent=2) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/__init__.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/__init__.py new file mode 100644 index 0000000..2aa2d37 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/__init__.py @@ -0,0 +1,30 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +__version__ = "2.20.2" + + +def version(): + """ + Return the current version of the Studio Library + + :rtype: str + """ + return __version__ + + +from studiolibrary import config +from studiolibrary import resource +from studiolibrary.utils import * +from studiolibrary.library import Library +from studiolibrary.libraryitem import LibraryItem +from studiolibrary.main import main diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/config.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/config.py new file mode 100644 index 0000000..40dc872 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/config.py @@ -0,0 +1,94 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import json + + +_config = None + + +def get(*args): + """ + Get values from the config. + + :rtype: str + """ + global _config + + if not _config: + _config = read(paths()) + + return _config.get(*args) + + +def set(key, value): + + global _config + + if not _config: + _config = read(paths()) + + _config[key] = value + + +def paths(): + """ + Return all possible config paths. + + :rtype: list[str] + """ + cwd = os.path.dirname(__file__) + paths_ = [os.path.join(cwd, "config", "default.json")] + + path = os.environ.get("STUDIO_LIBRARY_CONFIG_PATH") + path = path or os.path.join(cwd, "config", "config.json") + + if not os.path.exists(path): + cwd = os.path.dirname(os.path.dirname(cwd)) + path = os.path.join(cwd, "config", "config.json") + + if os.path.exists(path): + paths_.append(path) + + return paths_ + + +def read(paths): + """ + Read all paths and overwrite the keys with each successive file. + + A custom config parser for passing JSON files. + + We use this instead of the standard ConfigParser as the JSON format + can support list and dict types. + + This parser can also support comments using the following style "//" + + :type paths: list[str] + :rtype: dict + """ + conf = {} + + for path in paths: + lines = [] + + with open(path) as f: + for line in f.readlines(): + if not line.strip().startswith('//'): + lines.append(line) + + data = '\n'.join(lines) + if data: + conf.update(json.loads(data)) + + return conf diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/config/default.json b/2023/scripts/animation_tools/studiolibrary/studiolibrary/config/default.json new file mode 100644 index 0000000..1d02168 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/config/default.json @@ -0,0 +1,61 @@ +// This is the default config file and should NOT be changed. +// +// There are two ways to create a custom config. +// +// 1. You can create a "config.json" at repo/config/config.json. +// This file will override any keys in this default.json file +// and will be ignored by git. +// +// 2. The other way is to create an environment variable with the name +// STUDIO_LIBRARY_CONFIG_PATH. The value of this variable should be the +// full path to your config.json file. +// +// 3. Or you could use code to modify the config before loading the window. +// import studiolibrary +// studiolibrary.config.set("recursiveSearchDepth", 6) +// studiolibrary.main() + +{ + // The database path is used for caching the library items. + // You can use environment variables within the path. eg: {HOME} + "databasePath": "{root}/.studiolibrary/database.json", + + // The temp location used for saving out items and thumbnails + "tempPath": "{temp}/StudioLibrary/{user}", + + // The metadata path used for each item. Used for tags, item color etc + // eg: /library/data/animation/nemo/.metadata + "metadataPath": "{path}/.studiolibrary/metadata.json", + + // Used for saving persistent user data + "settingsPath": "{local}/StudioLibrary/LibraryWidget.json", + + // The maximum walking depth from the root directory + "recursiveSearchDepth": 5, + + // A list of paths to ignore when walking the root directory + "ignorePaths": ["/."], + + // The command used to show a path in the file explorer + //"showInFolderCmd": "konqueror \"{path}\"&", + + // Enables the scale factor option in the setting dialog + // This might be useful when using high-DPI devices like a 4k monitor + "scaleFactorEnabled": true, + + // Check if there are any new versions available on start up + "checkForUpdatesEnabled": true, + + // A list of the default item plugins + "itemRegistry": [ + // This is an example item for development + // "studiolibrarymaya.exampleitem.ExampleItem", + // The maya file item is in development + // "studiolibrarymaya.mayafileitem.MayaFileItem", + "studiolibrarymaya.poseitem.PoseItem", + "studiolibrarymaya.animitem.AnimItem", + "studiolibrarymaya.mirroritem.MirrorItem", + "studiolibrarymaya.setsitem.SetsItem", + "studiolibrary.folderitem.FolderItem" + ] +} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/folderitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/folderitem.py new file mode 100644 index 0000000..4956f37 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/folderitem.py @@ -0,0 +1,367 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +from datetime import datetime + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary +import studiolibrary.widgets + + +class FolderItem(studiolibrary.LibraryItem): + + NAME = "Folder" + TYPE = "Folder" + + MENU_ORDER = 0 # Show at the top of the menu + SYNC_ORDER = 100 # Last item to run when syncing + + LOAD_WIDGET_CLASS = studiolibrary.widgets.PreviewWidget + ENABLE_NESTED_ITEMS = True + + ICON_PATH = studiolibrary.resource.get("icons", "folder.svg") + TYPE_ICON_PATH = "" # Don't show a type icon for the folder item + THUMBNAIL_PATH = studiolibrary.resource.get("icons", "folder_item.png") + + DEFAULT_ICON_COLOR = "rgba(150,150,150,100)" + + DEFAULT_ICON_COLORS = [ + "rgb(239, 112, 99)", + "rgb(239, 207, 103)", + "rgb(136, 200, 101)", + "rgb(111, 183, 239)", + "rgb(199, 142, 220)", + DEFAULT_ICON_COLOR, + ] + + DEFAULT_ICONS = [ + "folder.svg", + "user.svg", + "character.svg", + "users.svg", + "inbox.svg", + "favorite.svg", + "shot.svg", + "asset.svg", + "assets.svg", + "cloud.svg", + "book.svg", + "archive.svg", + "circle.svg", + "share.svg", + "tree.svg", + "environment.svg", + "vehicle.svg", + "trash.svg", + "layers.svg", + "database.svg", + "video.svg", + "face.svg", + "hand.svg", + "globe.svg", + ] + + _THUMBNAIL_ICON_CACHE = {} + + @classmethod + def match(cls, path): + """ + Return True if the given path is supported by the item. + + :type path: str + :rtype: bool + """ + if os.path.isdir(path): + return True + + def itemData(self): + """ + Reimplementing this method to set a trash folder icon. + + :rtype: dict + """ + data = super(FolderItem, self).itemData() + + if self.path().endswith("Trash") and not data.get("icon"): + data["icon"] = "trash.svg" + + return data + + def updatePermissionsEnabled(self): + return True + + def updateMetadata(self, metadata): + """ + Overriding this method to support updating the library widget directly. + + :type metadata: dict + """ + super(FolderItem, self).updateMetadata(metadata) + + if self.libraryWindow(): + self.libraryWindow().setFolderData(self.path(), self.itemData()) + self.updateIcon() + + def doubleClicked(self): + """Overriding this method to show the items contained in the folder.""" + self.libraryWindow().selectFolderPath(self.path()) + + def createOverwriteMenu(self, menu): + """ + Overwriting this method to ignore/hide the overwrite menu action. + + :type menu: QtWidgets.QMenu + """ + pass + + def _showPreviewFromMenu(self): + + self.libraryWindow().itemsWidget().clearSelection() + self.showPreviewWidget(self.libraryWindow()) + + def contextEditMenu(self, menu, items=None): + """ + Called when creating the context menu for the item. + + :type menu: QtWidgets.QMenu + :type items: list[FolderItem] or None + """ + super(FolderItem, self).contextEditMenu(menu, items=items) + + action = QtWidgets.QAction("Show in Preview", menu) + + action.triggered.connect(self._showPreviewFromMenu) + menu.addAction(action) + menu.addSeparator() + + action = studiolibrary.widgets.colorpicker.ColorPickerAction(menu) + action.picker().setColors(self.DEFAULT_ICON_COLORS) + action.picker().colorChanged.connect(self.setIconColor) + action.picker().setCurrentColor(self.iconColor()) + action.picker().menuButton().hide() + menu.addAction(action) + + iconName = self.itemData().get("icon", "") + + action = studiolibrary.widgets.iconpicker.IconPickerAction(menu) + action.picker().setIcons(self.DEFAULT_ICONS) + action.picker().setCurrentIcon(iconName) + action.picker().iconChanged.connect(self.setCustomIcon) + action.picker().menuButton().hide() + + menu.addAction(action) + + def iconColor(self): + """ + Get the icon color for the folder item. + + :rtype: str + """ + return self.itemData().get("color", "") + + def setIconColor(self, color): + """ + Set the icon color for the folder item. + + :type color: str + """ + if color == self.DEFAULT_ICON_COLOR: + color = "" + + self.updateMetadata({"color": color}) + + def customIconPath(self): + """ + Get the icon for the folder item. + + :rtype: str + """ + return self.itemData().get("icon", "") + + def setCustomIcon(self, name): + """ + Set the icon for the folder item. + + :type name: str + """ + if name == "folder.svg": + name = "" + + self.updateMetadata({"icon": name}) + + def thumbnailIcon(self): + """ + Overriding this method add support for dynamic icon colors. + + :rtype: QtGui.QIcon + """ + customPath = self.customIconPath() + + if customPath and "/" not in customPath and "\\" not in customPath: + customPath = studiolibrary.resource.get("icons", customPath) + + color = self.iconColor() + if not color: + color = self.DEFAULT_ICON_COLOR + + key = customPath + color + icon = self._THUMBNAIL_ICON_CACHE.get(key) + + if not icon: + color1 = studioqt.Color.fromString(color) + pixmap1 = studioqt.Pixmap(self.THUMBNAIL_PATH) + pixmap1.setColor(color1) + pixmap1 = pixmap1.scaled( + 128, + 128, + QtCore.Qt.KeepAspectRatio, + QtCore.Qt.SmoothTransformation + ) + + color2 = studioqt.Color.fromString("rgba(255,255,255,150)") + pixmap2 = studioqt.Pixmap(customPath) + pixmap2.setColor(color2) + pixmap2 = pixmap2.scaled( + 64, + 64, + QtCore.Qt.KeepAspectRatio, + QtCore.Qt.SmoothTransformation + ) + + x = (128 - pixmap2.width()) / 2 + y = (128 - pixmap2.height()) / 2 + + painter = QtGui.QPainter(pixmap1) + painter.drawPixmap(x, y+5, pixmap2) + painter.end() + + icon = studioqt.Icon(pixmap1) + + self._THUMBNAIL_ICON_CACHE[key] = icon + + return self._THUMBNAIL_ICON_CACHE.get(key) + + def loadValidator(self, **kwargs): + """ + The validator used for validating the load arguments. + + :type kwargs: dict + """ + if kwargs.get("fieldChanged") == "color": + self.setIconColor(kwargs.get("color")) + + if kwargs.get("fieldChanged") == "icon": + self.setCustomIcon(kwargs.get("icon")) + + def loadSchema(self): + """ + Get the info to display to user. + + :rtype: list[dict] + """ + created = os.stat(self.path()).st_ctime + created = datetime.fromtimestamp(created).strftime("%Y-%m-%d %H:%M %p") + + modified = os.stat(self.path()).st_mtime + modified = datetime.fromtimestamp(modified).strftime("%Y-%m-%d %H:%M %p") + + iconName = self.itemData().get("icon", "") + + return [ + { + "name": "infoGroup", + "title": "Info", + "value": True, + "type": "group", + "persistent": True, + "persistentKey": "BaseItem", + }, + { + "name": "name", + "value": self.name() + }, + { + "name": "path", + "value": self.path() + }, + { + "name": "created", + "value": created, + }, + { + "name": "modified", + "value": modified, + }, + { + "name": "optionsGroup", + "title": "Options", + "type": "group", + }, + + { + "name": "color", + "type": "color", + "value": self.iconColor(), + "layout": "vertical", + "label": {"visible": False}, + "colors": self.DEFAULT_ICON_COLORS, + }, + + { + "name": "icon", + "type": "iconPicker", + "value": iconName, + "layout": "vertical", + "label": {"visible": False}, + "items": self.DEFAULT_ICONS, + } + ] + + @classmethod + def showSaveWidget(cls, libraryWindow): + """ + Show the dialog for creating a new folder. + + :rtype: None + """ + path = libraryWindow.selectedFolderPath() or libraryWindow.path() + + name, button = studiolibrary.widgets.MessageBox.input( + libraryWindow, + "Create folder", + "Create a new folder with the name:", + buttons=[ + ("Create", QtWidgets.QDialogButtonBox.AcceptRole), + ("Cancel", QtWidgets.QDialogButtonBox.RejectRole) + ] + ) + + name = name.strip() + + if name and button == "Create": + path = os.path.join(path, name) + + item = cls(path, libraryWindow=libraryWindow) + item.safeSave() + + if libraryWindow: + libraryWindow.refresh() + libraryWindow.selectFolderPath(path) + + def save(self, *args, **kwargs): + """Adding this method to avoid NotImpementedError.""" + pass diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/library.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/library.py new file mode 100644 index 0000000..28a4160 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/library.py @@ -0,0 +1,1081 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +import fnmatch +import os +import copy +import re +import time +import logging +import collections + +from studiovendor import six +from studiovendor.Qt import QtCore + +import studiolibrary + + +__all__ = [ + "Library", +] + +logger = logging.getLogger(__name__) + + +class Library(QtCore.QObject): + + Fields = [ + { + "name": "icon", + "sortable": False, + "groupable": False, + }, + { + "name": "name", + "sortable": True, + "groupable": False, + }, + { + "name": "path", + "sortable": True, + "groupable": False, + }, + { + "name": "type", + "sortable": True, + "groupable": True, + }, + { + "name": "folder", + "sortable": True, + "groupable": False, + }, + { + "name": "category", + "sortable": True, + "groupable": True, + }, + { + "name": "modified", + "sortable": True, + "groupable": False, + }, + { + "name": "Custom Order", + "sortable": True, + "groupable": False, + }, + ] + + dataChanged = QtCore.Signal() + searchStarted = QtCore.Signal() + searchFinished = QtCore.Signal() + searchTimeFinished = QtCore.Signal() + + def __init__(self, path=None, libraryWindow=None, *args): + QtCore.QObject.__init__(self, *args) + + self._path = path + self._mtime = None + self._data = {} + self._items = [] + self._fields = [] + self._sortBy = [] + self._groupBy = [] + self._results = [] + self._queries = {} + self._globalQueries = {} + self._groupedResults = {} + self._searchTime = 0 + self._searchEnabled = True + self._registeredItems = None + self._libraryWindow = libraryWindow + + self.setPath(path) + self.setDirty(True) + + def sortBy(self): + """ + Get the list of fields to sort by. + + :rtype: list[str] + """ + return self._sortBy + + def setSortBy(self, fields): + """ + Set the list of fields to group by. + + Example: + library.setSortBy(["name:asc", "type:asc"]) + + :type fields: list[str] + """ + self._sortBy = fields + + def groupBy(self): + """ + Get the list of fields to group by. + + :rtype: list[str] + """ + return self._groupBy + + def setGroupBy(self, fields): + """ + Set the list of fields to group by. + + Example: + library.setGroupBy(["name:asc", "type:asc"]) + + :type fields: list[str] + """ + self._groupBy = fields + + def settings(self): + """ + Get the settings for the dataset. + + :rtype: dict + """ + return { + "sortBy": self.sortBy(), + "groupBy": self.groupBy() + } + + def setSettings(self, settings): + """ + Set the settings for the dataset object. + + :type settings: dict + """ + value = settings.get('sortBy') + if value is not None: + self.setSortBy(value) + + value = settings.get('groupBy') + if value is not None: + self.setGroupBy(value) + + def setSearchEnabled(self, enabled): + """Enable or disable the search the for the library.""" + self._searchEnabled = enabled + + def isSearchEnabled(self): + """Check if search is enabled for the library.""" + return self._searchEnabled + + def recursiveDepth(self): + """ + Return the recursive search depth. + + :rtype: int + """ + return studiolibrary.config.get('recursiveSearchDepth') + + def fields(self): + """ + Get all the fields for the library. + + :rtype: list[dict] + """ + return self.Fields + + def fieldNames(self): + """ + Get all the field names for the library. + + :rtype: list[str] + """ + return [field["name"] for field in self.fields()] + + def path(self): + """ + Return the disc location of the db. + + :rtype: str + """ + return self._path + + def setPath(self, path): + """ + Set the disc location of the db. + + :type path: str + """ + self._path = path + + def databasePath(self): + """ + Return the path to the database. + + :rtype: str + """ + formatString = studiolibrary.config.get('databasePath') + return studiolibrary.formatPath(formatString, path=self.path()) + + def distinct(self, field, queries=None, sortBy="name"): + """ + Get all the values for the given field. + + :type field: str + :type queries None or list[dict] + :type sortBy: str + :rtype: list + """ + results = {} + queries = queries or [] + queries.extend(self._globalQueries.values()) + + items = self.createItems() + for item in items: + value = item.itemData().get(field) + if value: + results.setdefault(value, {'count': 0, 'name': value}) + match = self.match(item.itemData(), queries) + if match: + results[value]['count'] += 1 + + def sortKey(facet): + return facet.get(sortBy) + + return sorted(results.values(), key=sortKey) + + def mtime(self): + """ + Return when the database was last modified. + + :rtype: float or None + """ + path = self.databasePath() + mtime = None + + if os.path.exists(path): + mtime = os.path.getmtime(path) + + return mtime + + def setDirty(self, value): + """ + Update the model object with the current database timestamp. + + :type: bool + """ + if value: + self._mtime = None + else: + self._mtime = self.mtime() + + def isDirty(self): + """ + Return True if the database has changed on disc. + + :rtype: bool + """ + return not self._items or self._mtime != self.mtime() + + def read(self): + """ + Read the database from disc and return a dict object. + + :rtype: dict + """ + if self.path(): + if self.isDirty(): + self._data = studiolibrary.readJson(self.databasePath()) + self.setDirty(False) + else: + logger.info('No path set for reading the data from disc.') + + return self._data + + def save(self, data): + """ + Write the given dict object to the database on disc. + + :type data: dict + :rtype: None + """ + if self.path(): + studiolibrary.saveJson(self.databasePath(), data) + self.setDirty(True) + self.updatePermissions(self.databasePath()) + else: + logger.info('No path set for saving the data to disc.') + + def clear(self): + """Clear all the item data.""" + self._items = [] + self._results = [] + self._groupedResults = {} + self._registeredItems = None + self.dataChanged.emit() + + def registeredItems(self): + """ + Get registered items for the library. + + :rtype: list[LibraryItem.__class__] + """ + return studiolibrary.registeredItems() + + def isValidPath(self, path): + """ + Check if the given item path should be ignored. + + :type path: str + :rtype: bool + """ + patterns = studiolibrary.config.get('ignorePaths', []) + patterns.append("*/.*") + patterns.append("*.python") + patterns.append("*.playblast") + patterns.append("*.playblast_settings") + + for pattern in patterns: + if fnmatch.fnmatch(path, pattern): + return False + return True + + def walker(self, path): + """ + Walk the given root path for valid items and return the item data. + + :type path: str + + :rtype: collections.Iterable[dict] + """ + path = studiolibrary.normPath(path) + maxDepth = self.recursiveDepth() + startDepth = path.count(os.path.sep) + + for root, dirs, files in os.walk(path, followlinks=True): + + files.extend(dirs) + + for filename in files: + + # Normalise the path for consistent matching + path = studiolibrary.normPath(os.path.join(root, filename)) + + # Ignore any paths that have been specified in the config + remove = False + if not self.isValidPath(path): + remove = True + else: + # Match the path with a registered item + item = self.itemFromPath(path) + if item: + + # Yield the item data that matches the current path + yield item.createItemData() + + # Stop walking if the item doesn't support nested items + if not item.ENABLE_NESTED_ITEMS: + remove = True + + if remove and filename in dirs: + dirs.remove(filename) + + if maxDepth == 1: + break + + # Stop walking the directory if the maximum depth has been reached + currentDepth = root.count(os.path.sep) + if (currentDepth - startDepth) >= maxDepth: + del dirs[:] + + def sync(self, progressCallback=None): + """ + Sync the file system with the database. + + :type progressCallback: None or func + """ + if not self.path(): + logger.info('No path set for syncing data') + return + + if progressCallback: + progressCallback("Syncing") + + new = {} + old = self.read() + items = list(self.walker(self.path())) + count = len(items) + + for i, item in enumerate(items): + percent = (float(i+1)/float(count)) + if progressCallback: + percent *= 100 + label = "{0:.0f}%".format(percent) + progressCallback(label, percent) + + path = item.get("path") + new[path] = old.get(path, {}) + new[path].update(item) + + if progressCallback: + progressCallback("Post Callbacks") + + self.postSync(new) + + if progressCallback: + progressCallback("Saving Cache") + + self.save(new) + + self.dataChanged.emit() + + def postSync(self, data): + """ + Use this function to execute code on the data after sync, but before save and dataChanged.emit + + :type data: dict + :rtype: None + """ + pass + + def createItems(self): + """ + Create all the items for the model. + + :rtype: list[studiolibrary.LibraryItem] + """ + # Check if the cache has changed since the last read call + if self.isDirty(): + + logger.debug("Creating items") + + self._items = [] + + data = self.read() + + modules = [] + for itemData in data.values(): + if '__class__' in itemData: + modules.append(itemData.get("__class__")) + modules = set(modules) + + classes = {} + for module in modules: + classes[module] = studiolibrary.resolveModule(module) + + for path in data.keys(): + module = data[path].get("__class__") + cls = classes.get(module) + if cls: + item = cls(path, library=self, libraryWindow=self._libraryWindow) + item.setItemData(data[path]) + self._items.append(item) + else: + # This is to support the older database data before v2.6. + # Will remove in a later version. + item = self.itemFromPath(path, library=self, libraryWindow=self._libraryWindow) + if item: + item.setItemData(data[path]) + self._items.append(item) + + return self._items + + def itemFromPath(self, path, **kwargs): + """ + Return a new item instance for the given path. + + :type path: str + :rtype: studiolibrary.LibraryItem or None + """ + path = studiolibrary.normPath(path) + + for cls in self.registeredItems(): + if cls.match(path): + return cls(path, **kwargs) + + def itemsFromPaths(self, paths, **kwargs): + """ + Return new item instances for the given paths. + + :type paths: list[str]: + :rtype: collections.Iterable[studiolibrary.LibraryItem] + """ + for path in paths: + item = self.itemFromPath(path, **kwargs) + if item: + yield item + + def itemsFromUrls(self, urls, **kwargs): + """ + Return new item instances for the given QUrl objects. + + :type urls: list[QtGui.QUrl] + :rtype: list[studiolibrary.LibraryItem] + """ + items = [] + for path in studiolibrary.pathsFromUrls(urls): + + item = self.itemFromPath(path, **kwargs) + + if item: + data = item.createItemData() + item.setItemData(data) + + items.append(item) + else: + msg = 'Cannot find the item for path "{0}"' + msg = msg.format(path) + logger.warning(msg) + + return items + + def findItems(self, queries): + """ + Get the items that match the given queries. + + Examples: + + queries = [ + { + 'operator': 'or', + 'filters': [ + ('folder', 'is' '/library/proj/test'), + ('folder', 'startswith', '/library/proj/test'), + ] + }, + { + 'operator': 'and', + 'filters': [ + ('path', 'contains' 'test'), + ('path', 'contains', 'run'), + ] + } + ] + + print(library.find(queries)) + + :type queries: list[dict] + :rtype: list[studiolibrary.LibraryItem] + """ + fields = [] + results = [] + + queries = copy.copy(queries) + queries.extend(self._globalQueries.values()) + + logger.debug("Search queries:") + for query in queries: + logger.debug('Query: %s', query) + + items = self.createItems() + for item in items: + match = self.match(item.itemData(), queries) + if match: + results.append(item) + fields.extend(item.itemData().keys()) + + self._fields = list(set(fields)) + + if self.sortBy(): + results = self.sorted(results, self.sortBy()) + + return results + + def queries(self, exclude=None): + """ + Get all the queries for the dataset excluding the given ones. + + :type exclude: list[str] or None + + :rtype: list[dict] + """ + queries = [] + exclude = exclude or [] + + for query in self._queries.values(): + if query.get('name') not in exclude: + queries.append(query) + + return queries + + def addGlobalQuery(self, query): + """ + Add a global query to library. + + :type query: dict + """ + self._globalQueries[query["name"]] = query + + def addQuery(self, query): + """ + Add a search query to the library. + + Examples: + addQuery({ + 'name': 'My Query', + 'operator': 'or', + 'filters': [ + ('folder', 'is' '/library/proj/test'), + ('folder', 'startswith', '/library/proj/test'), + ] + }) + + :type query: dict + """ + self._queries[query["name"]] = query + + def removeQuery(self, name): + """ + Remove the query with the given name. + + :type name: str + """ + if name in self._queries: + del self._queries[name] + + def queryExists(self, name): + """ + Check if the given query name exists. + + :type name: str + :rtype: bool + """ + return name in self._queries + + def search(self): + """Run a search using the queries added to this dataset.""" + if not self.isSearchEnabled(): + logger.debug('Search is disabled') + return + + t = time.time() + + logger.debug("Searching items") + + self.searchStarted.emit() + + self._results = self.findItems(self.queries()) + + self._groupedResults = self.groupItems(self._results, self.groupBy()) + + self.searchFinished.emit() + + self._searchTime = time.time() - t + + self.searchTimeFinished.emit() + + logger.debug('Search time: %s', self._searchTime) + + def results(self): + """ + Return the items found after a search is ran. + + :rtype: list[Item] + """ + return self._results + + def groupedResults(self): + """ + Get the results grouped after a search is ran. + + :rtype: dict + """ + return self._groupedResults + + def searchTime(self): + """ + Return the time taken to run a search. + + :rtype: float + """ + return self._searchTime + + def addItem(self, item): + """ + Add the given item to the database. + + :type item: studiolibrary.LibraryItem + :rtype: None + """ + self.saveItemData([item]) + + def addItems(self, items): + """ + Add the given items to the database. + + :type items: list[studiolibrary.LibraryItem] + """ + self.saveItemData(items) + + def saveItemData(self, items, emitDataChanged=True): + """ + Add the given items to the database. + + :type items: list[studiolibrary.LibraryItem] + :type emitDataChanged: bool + """ + logger.debug("Save item data %s", items) + + data_ = self.read() + + for item in items: + path = item.path() + data = item.itemData() + data_.setdefault(path, {}) + data_[path].update(data) + + self.save(data_) + + if emitDataChanged: + self.search() + self.dataChanged.emit() + + def addPaths(self, paths, data=None): + """ + Add the given path and the given data to the database. + + :type paths: list[str] + :type data: dict or None + :rtype: None + """ + data = data or {} + self.updatePaths(paths, data) + + def updatePaths(self, paths, data): + """ + Update the given paths with the given data in the database. + + :type paths: list[str] + :type data: dict + :rtype: None + """ + data_ = self.read() + paths = studiolibrary.normPaths(paths) + + for path in paths: + if path in data_: + data_[path].update(data) + else: + data_[path] = data + + self.save(data_) + + def copyPath(self, src, dst): + """ + Copy the given source path to the given destination path. + + :type src: str + :type dst: str + :rtype: str + """ + self.addPaths([dst]) + return dst + + def renamePath(self, src, dst): + """ + Rename the source path to the given name. + + :type src: str + :type dst: str + :rtype: str + """ + studiolibrary.renamePathInFile(self.databasePath(), src, dst) + self.setDirty(True) + self.updatePermissions(self.databasePath()) + return dst + + def updatePermissions(self, dst): + """ + Update the permissions and ownership of the destination path to match the + root library path if running on a Linux system. + + This helps with permission issues for shared libraries when using a default + umask of 022. + + :type dst: str + :rtype: None + """ + if not studiolibrary.isLinux(): + return + + stat = os.stat(self.path()) + + try: + os.chmod(dst, stat.st_mode) + except OSError as e: + logger.warning("Error changing permissions: %s", e) + + try: + os.chown(dst, -1, stat.st_gid) + except OSError as e: + logger.warning("Error changing group ownership: %s", e) + + def removePath(self, path): + """ + Remove the given path from the database. + + :type path: str + :rtype: None + """ + self.removePaths([path]) + + def removePaths(self, paths): + """ + Remove the given paths from the database. + + :type paths: list[str] + :rtype: None + """ + data = self.read() + + paths = studiolibrary.normPaths(paths) + + for path in paths: + if path in data: + del data[path] + + self.save(data) + + @staticmethod + def match(data, queries): + """ + Match the given data with the given queries. + + Examples: + + queries = [ + { + 'operator': 'or', + 'filters': [ + ('folder', 'is' '/library/proj/test'), + ('folder', 'startswith', '/library/proj/test'), + ] + }, + { + 'operator': 'and', + 'filters': [ + ('path', 'contains' 'test'), + ('path', 'contains', 'run'), + ] + } + ] + + print(library.find(queries)) + """ + matches = [] + + for query in queries: + + filters = query.get('filters') + operator = query.get('operator', 'and') + + if not filters: + continue + + match = False + + for key, cond, value in filters: + + if key == '*': + itemValue = six.text_type(data) + else: + itemValue = data.get(key) + + if isinstance(value, six.string_types): + value = value.lower() + + if isinstance(itemValue, six.string_types): + itemValue = itemValue.lower() + + if not itemValue: + match = False + + elif cond == 'contains': + match = value in itemValue + + elif cond == 'not_contains': + match = value not in itemValue + + elif cond == 'is': + match = value == itemValue + + elif cond == 'not': + match = value != itemValue + + elif cond == 'startswith': + match = itemValue.startswith(value) + + if operator == 'or' and match: + break + + if operator == 'and' and not match: + break + + matches.append(match) + + return all(matches) + + @staticmethod + def sorted(items, sortBy): + """ + Return the given data sorted using the sortBy argument. + + Example: + data = [ + {'name':'red', 'index':1}, + {'name':'green', 'index':2}, + {'name':'blue', 'index':3}, + ] + + sortBy = ['index:asc', 'name'] + # sortBy = ['index:dsc', 'name'] + + print(sortedData(data, sortBy)) + + :type items: list[Item] + :type sortBy: list[str] + :rtype: list[Item] + """ + logger.debug('Sort by: %s', sortBy) + + t = time.time() + + for field in reversed(sortBy): + + tokens = field.split(':') + + reverse = False + if len(tokens) > 1: + field = tokens[0] + reverse = tokens[1] != 'asc' + + def sortKey(item): + + default = False if reverse else '' + + return item.itemData().get(field, default) + + items = sorted(items, key=sortKey, reverse=reverse) + + logger.debug("Sort items took %s", time.time() - t) + + return items + + @staticmethod + def groupItems(items, fields): + """ + Group the given items by the given field. + + :type items: list[Item] + :type fields: list[str] + :rtype: dict + """ + logger.debug('Group by: %s', fields) + + # Only support for top level grouping at the moment. + if fields: + field = fields[0] + else: + return {'None': items} + + t = time.time() + + results_ = {} + tokens = field.split(':') + + reverse = False + if len(tokens) > 1: + field = tokens[0] + reverse = tokens[1] != 'asc' + + for item in items: + value = item.itemData().get(field) + if value: + results_.setdefault(value, []) + results_[value].append(item) + + groups = sorted(results_.keys(), reverse=reverse) + + results = collections.OrderedDict() + for group in groups: + results[group] = results_[group] + + logger.debug("Group Items Took %s", time.time() - t) + + return results + + +def testsuite(): + + data = [ + {'name': 'blue', 'index': 3}, + {'name': 'red', 'index': 1}, + {'name': 'green', 'index': 2}, + ] + + sortBy = ['index:asc', 'name'] + data2 = (Library.sortedData(data, sortBy)) + + assert(data2[0].get('index') == 1) + assert(data2[1].get('index') == 2) + assert(data2[2].get('index') == 3) + + sortBy = ['index:dsc', 'name'] + data3 = (Library.sortedData(data, sortBy)) + + assert(data3[0].get('index') == 3) + assert(data3[1].get('index') == 2) + assert(data3[2].get('index') == 1) + + data = {'name': 'blue', 'index': 3} + queries = [{'filters': [('name', 'is', 'blue')]}] + assert Library.match(data, queries) + + data = {'name': 'red', 'index': 3} + queries = [{'filters': [('name', 'is', 'blue')]}] + assert not Library.match(data, queries) + + data = {'name': 'red', 'index': 3} + queries = [{'filters': [('name', 'startswith', 're')]}] + assert Library.match(data, queries) + + data = {'name': 'red', 'index': 3} + queries = [{'filters': [('name', 'startswith', 'ed')]}] + assert not Library.match(data, queries) + + data = {'name': 'red', 'index': 3} + queries = [{ + 'operator': 'or', + 'filters': [('name', 'is', 'pink'), ('name', 'is', 'red')] + }] + assert Library.match(data, queries) + + data = {'name': 'red', 'index': 3} + queries = [{ + 'operator': 'and', + 'filters': [('name', 'is', 'pink'), ('name', 'is', 'red')] + }] + assert not Library.match(data, queries) + + data = {'name': 'red', 'index': 3} + queries = [{ + 'operator': 'and', + 'filters': [('name', 'is', 'red'), ('index', 'is', 3)] + }] + assert Library.match(data, queries) + + data = {'name': 'red', 'index': 3} + queries = [{ + 'operator': 'and', + 'filters': [('name', 'is', 'red'), ('index', 'is', '3')] + }] + assert not Library.match(data, queries) + + +if __name__ == "__main__": + testsuite() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/libraryitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/libraryitem.py new file mode 100644 index 0000000..94dd429 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/libraryitem.py @@ -0,0 +1,913 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import shutil +import logging +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studiolibrary +import studiolibrary.widgets +import studiolibrary.librarywindow + +import studioqt + + +logger = logging.getLogger(__name__) + + +class ItemError(Exception): + """""" + + +class ItemSaveError(ItemError): + """""" + + +class ItemLoadError(ItemError): + """""" + + +class LibraryItemSignals(QtCore.QObject): + """""" + saved = QtCore.Signal(object) + saving = QtCore.Signal(object) + loaded = QtCore.Signal(object) + copied = QtCore.Signal(object, object, object) + deleted = QtCore.Signal(object) + renamed = QtCore.Signal(object, object, object) + dataChanged = QtCore.Signal(object) + +# Note: We will be changing the base class in the near future +class LibraryItem(studiolibrary.widgets.Item): + + NAME = "" + TYPE = "" + THUMBNAIL_PATH = studiolibrary.resource.get("icons", "thumbnail.png") + + EXTENSION = "" + EXTENSIONS = [] + + ENABLE_DELETE = False + ENABLE_NESTED_ITEMS = False + + SYNC_ORDER = 10 + MENU_ORDER = 10 + + SAVE_WIDGET_CLASS = None + LOAD_WIDGET_CLASS = None + + _libraryItemSignals = LibraryItemSignals() + + saved = _libraryItemSignals.saved + saving = _libraryItemSignals.saving + loaded = _libraryItemSignals.loaded + copied = _libraryItemSignals.renamed + renamed = _libraryItemSignals.renamed + deleted = _libraryItemSignals.deleted + dataChanged = _libraryItemSignals.dataChanged + + def createItemData(self): + """ + Called when syncing the given path with the library cache. + + :rtype: dict + """ + import studiolibrary.library + + path = self.path() + path = studiolibrary.latestVersionPath(path) or path + + if studiolibrary.isVersionPath(path): + dirname = os.path.dirname(path) + name = os.path.basename(dirname) + dirname, basename, extension = studiolibrary.splitPath(dirname) + else: + dirname, basename, extension = studiolibrary.splitPath(path) + name = os.path.basename(path) + + category = os.path.basename(dirname) or dirname + modified = "" + + if os.path.exists(path): + modified = os.path.getmtime(path) + + itemData = dict(self.readMetadata()) + + itemData.update({ + "name": name, + "path": path, + "type": self.TYPE or extension, + "folder": dirname, + "category": category, + "modified": modified, + "__class__": self.__class__.__module__ + "." + self.__class__.__name__ + }) + + return itemData + + @classmethod + def createAction(cls, menu, libraryWindow): + """ + Return the action to be displayed when the user + ks the "plus" icon. + + :type menu: QtWidgets.QMenu + :type libraryWindow: studiolibrary.LibraryWindow + :rtype: QtCore.QAction + """ + if cls.NAME: + + icon = QtGui.QIcon(cls.ICON_PATH) + callback = partial(cls.showSaveWidget, libraryWindow) + + action = QtWidgets.QAction(icon, cls.NAME, menu) + action.triggered.connect(callback) + + return action + + @classmethod + def showSaveWidget(cls, libraryWindow, item=None): + """ + Show the create widget for creating a new item. + + :type libraryWindow: studiolibrary.LibraryWindow + :type item: studiolibrary.LibraryItem or None + """ + item = item or cls() + widget = cls.SAVE_WIDGET_CLASS(item=item) + libraryWindow.setCreateWidget(widget) + + @classmethod + def isValidPath(cls, path): + """ + This method has been deprecated. + + Please use LibraryItem.match(cls, path) + + :type path: str + :rtype: bool + """ + return cls.match(path) + + @classmethod + def match(cls, path): + """ + Return True if the given path location is supported by the item. + + :type path: str + :rtype: bool + """ + extensions = cls.EXTENSIONS + if not extensions and cls.EXTENSION: + extensions = [cls.EXTENSION] + + for ext in extensions: + if path.endswith(ext): + return True + + return False + + def __init__( + self, + path="", + library=None, + libraryWindow=None, + ): + """ + The LibraryItem class provides an item for use with the LibraryWindow. + + :type path: str + :type library: studiolibrary.Library or None + :type libraryWindow: studiolibrary.LibraryWindow or None + """ + super(LibraryItem, self).__init__() + + self._path = path + self._modal = None + self._library = None + self._metadata = None + self._libraryWindow = None + + self._readOnly = False + self._ignoreExistsDialog = False + + if libraryWindow: + self.setLibraryWindow(libraryWindow) + + if library: + self.setLibrary(library) + + # if path: + # self.setPath(path) + + def updatePermissionsEnabled(self): + return False + + def setReadOnly(self, readOnly): + """ + Set the item to read only. + + :type readOnly: bool + """ + self._readOnly = readOnly + + def isReadOnly(self): + """ + Check if the item is read only. + + :rtype: bool + """ + if self.isLocked(): + return True + + return self._readOnly + + def isLocked(self): + """ + Check if the item has been locked by the window. + + :rtype: bool + """ + locked = False + if self.libraryWindow(): + locked = self.libraryWindow().isLocked() + return locked + + def isDeletable(self): + """ + Check if the item is deletable. + + :rtype: bool + """ + if self.isLocked(): + return False + + return self.ENABLE_DELETE + + def overwrite(self): + """ + Show the save widget with the input fields populated. + """ + self._ignoreExistsDialog = True + widget = self.showSaveWidget(self.libraryWindow(), item=self) + + def loadSchema(self): + """ + Get the options used to load the item. + + :rtype: list[dict] + """ + return [] + + def loadValidator(self, **kwargs): + """ + Validate the current load options. + + :type kwargs: dict + :rtype: list[dict] + """ + return [] + + def load(self, *args, **kwargs): + """ + Reimplement this method for loading item data. + + :type args: list + :type kwargs: dict + """ + raise NotImplementedError("The load method has not been implemented!") + + def id(self): + """ + Return the unique id for the item. + + :rtype: str + """ + return self.path() + + def showToastMessage(self, text): + """ + A convenience method for showing the toast widget with the given text. + + :type text: str + """ + if self.libraryWindow(): + self.libraryWindow().showToastMessage(text) + + def showErrorDialog(self, title, text): + """ + Convenience method for showing an error dialog to the user. + + :type title: str + :type text: str + :rtype: QMessageBox.StandardButton or None + """ + if self.libraryWindow(): + self.libraryWindow().showErrorMessage(text) + + button = None + + if not self._modal: + self._modal = True + + try: + button = studiolibrary.widgets.MessageBox.critical(self.libraryWindow(), title, text) + finally: + self._modal = False + + return button + + def showExceptionDialog(self, title, error): + """ + Convenience method for showing a question dialog to the user. + + :type title: str + :type error: Exception + :rtype: QMessageBox.StandardButton + """ + logger.exception(error) + return self.showErrorDialog(title, error) + + def showQuestionDialog(self, title, text): + """ + Convenience method for showing a question dialog to the user. + + :type title: str + :type text: str + :rtype: QMessageBox.StandardButton + """ + return studiolibrary.widgets.MessageBox.question(self.libraryWindow(), title, text) + + def thumbnailPath(self): + """ + Return the thumbnail location on disc for this item. + + :rtype: str + """ + thumbnailPath = self.path() + "/thumbnail.jpg" + if os.path.exists(thumbnailPath): + return thumbnailPath + + thumbnailPath = thumbnailPath.replace(".jpg", ".png") + if os.path.exists(thumbnailPath): + return thumbnailPath + + return self.THUMBNAIL_PATH + + def isTHUMBNAIL_PATH(self): + """ + Check if the thumbnail path is the default path. + + :rtype: bool + """ + return self.thumbnailPath() == self.THUMBNAIL_PATH + + def showPreviewWidget(self, libraryWindow): + """ + Show the preview Widget for the item instance. + + :type libraryWindow: studiolibrary.LibraryWindow + """ + widget = self.previewWidget(libraryWindow) + libraryWindow.setPreviewWidget(widget) + + def previewWidget(self, libraryWindow): + """ + Return the widget to be shown when the user clicks on the item. + + :type libraryWindow: studiolibrary.LibraryWindow + :rtype: QtWidgets.QWidget or None + """ + widget = None + + if self.LOAD_WIDGET_CLASS: + widget = self.LOAD_WIDGET_CLASS(item=self) + + return widget + + def isVersionPath(self): + return studiolibrary.isVersionPath(self.path()) + + def contextEditMenu(self, menu, items=None): + """ + Called when the user would like to edit the item from the menu. + + The given menu is shown as a submenu of the main context menu. + + :type menu: QtWidgets.QMenu + :type items: list[LibraryItem] or None + """ + # Adding a blank icon fixes the text alignment issue when using Qt 5.12.+ + icon = studiolibrary.resource.icon("blank") + enabled = not self.isVersionPath() + + action = QtWidgets.QAction("Rename", menu) + action.setEnabled(enabled) + action.setIcon(icon) + action.triggered.connect(self.showRenameDialog) + menu.addAction(action) + + action = QtWidgets.QAction("Move to", menu) + action.setEnabled(enabled) + action.triggered.connect(self.showMoveDialog) + menu.addAction(action) + + action = QtWidgets.QAction("Copy Path", menu) + action.triggered.connect(self.copyPathToClipboard) + action.setEnabled(enabled) + menu.addAction(action) + + if self.libraryWindow(): + action = QtWidgets.QAction("Select Folder", menu) + action.triggered.connect(self.selectFolder) + menu.addAction(action) + + action = QtWidgets.QAction("Show in Folder", menu) + action.triggered.connect(self.showInFolder) + menu.addAction(action) + + if self.isDeletable(): + menu.addSeparator() + action = QtWidgets.QAction("Delete", menu) + action.setEnabled(enabled) + action.triggered.connect(self.showDeleteDialog) + menu.addAction(action) + + self.createOverwriteMenu(menu) + + def createOverwriteMenu(self, menu): + """ + Create a menu or action to trigger the overwrite method. + + :type menu: QtWidgets.QMenu + """ + if not self.isReadOnly(): + enabled = not self.isVersionPath() + menu.addSeparator() + action = QtWidgets.QAction("Overwrite", menu) + action.setEnabled(enabled) + action.triggered.connect(self.overwrite) + menu.addAction(action) + + def copyPathToClipboard(self): + """Copy the item path to the system clipboard.""" + cb = QtWidgets.QApplication.clipboard() + cb.clear(mode=cb.Clipboard) + cb.setText(self.path(), mode=cb.Clipboard) + + def contextMenu(self, menu, items=None): + """ + Called when the user right clicks on the item. + + :type menu: QtWidgets.QMenu + :type items: list[LibraryItem] + :rtype: None + """ + pass + + def showInFolder(self): + """Open the file explorer at the given path location.""" + path = self.path() + studiolibrary.showInFolder(path) + + def selectFolder(self): + """select the folder in the library widget""" + if self.libraryWindow(): + path = '/'.join(studiolibrary.normPath(self.path()).split('/')[:-1]) + self.libraryWindow().selectFolderPath(path) + + def url(self): + """Used by the mime data when dragging/dropping the item.""" + return QtCore.QUrl("file:///" + self.path()) + + def setLibraryWindow(self, libraryWindow): + """ + Set the library widget containing the item. + + :rtype: studiolibrary.LibraryWindow or None + """ + self._libraryWindow = libraryWindow + + def libraryWindow(self): + """ + Return the library widget containing the item. + + :rtype: studiolibrary.LibraryWindow or None + """ + return self._libraryWindow + + def setLibrary(self, library): + """ + Set the library model for the item. + + :type library: studiolibrary.Library + """ + self._library = library + + def library(self): + """ + Return the library model for the item. + + :rtype: studiolibrary.Library or None + """ + if not self._library and self.libraryWindow(): + return self.libraryWindow().library() + + return self._library + + def setIconPath(self, path): + """ + Set the icon path for the current item. + + :type path: str + :rtype: None + """ + self._iconPath = path + + def iconPath(self): + """ + Return the icon path for the current item. + + :rtype: None + """ + return self._iconPath + + def mimeText(self): + """ + :rtype: str + """ + return self.path() + + def path(self): + """ + Get the path for the item. + + :rtype: str + """ + return self._path + + def setPath(self, path): + """ + Set the path for the item. + + :rtype: str + """ + self._path = studiolibrary.normPath(path) + + def setMetadata(self, metadata): + """ + Set the given metadata for the item. + + :type metadata: dict + """ + self._metadata = metadata + + def metadata(self): + """ + Get the metadata for the item from disc. + + :rtype: dict + """ + return self._metadata + + def updateMetadata(self, metadata): + """ + Update the current metadata from disc with the given metadata. + + :type metadata: dict + """ + metadata_ = self.readMetadata() + metadata_.update(metadata) + self.saveMetadata(metadata_) + + def saveMetadata(self, metadata): + """ + Save the given metadata to disc. + + :type metadata: dict + """ + formatString = studiolibrary.config.get('metadataPath') + path = studiolibrary.formatPath(formatString, self.path()) + studiolibrary.saveJson(path, metadata) + + if self.updatePermissionsEnabled(): + self.library().updatePermissions(path) + + self.setMetadata(metadata) + self.syncItemData(emitDataChanged=False) + self.dataChanged.emit(self) + + def readMetadata(self): + """ + Read the metadata for the item from disc. + + :rtype: dict + """ + if self._metadata is None: + formatString = studiolibrary.config.get('metadataPath') + path = studiolibrary.formatPath(formatString, self.path()) + + if os.path.exists(path): + self._metadata = studiolibrary.readJson(path) + else: + self._metadata = {} + + return self._metadata + + def syncItemData(self, emitDataChanged=True): + """Sync the item data to the database.""" + data = self.createItemData() + self.setItemData(data) + + if self.library(): + self.library().saveItemData([self], emitDataChanged=emitDataChanged) + + def saveSchema(self): + """ + Get the schema used for saving the item. + + :rtype: list[dict] + """ + return [] + + def saveValidator(self, **fields): + """ + Validate the given save fields. + + :type fields: dict + :rtype: list[dict] + """ + return [] + + @studioqt.showWaitCursor + def safeSave(self, *args, **kwargs): + """ + Safe save the item. + """ + dst = self.path() + + if dst and not dst.endswith(self.EXTENSION): + dst += self.EXTENSION + + self.setPath(dst) + + logger.debug(u'Item Saving: {0}'.format(dst)) + self.saving.emit(self) + + if os.path.exists(dst): + if studiolibrary.latestVersionPath(self.path()): + raise NameError("You can only save items that were " + "created using Studio Library version 2!") + elif self._ignoreExistsDialog: + self._moveToTrash() + else: + self.showAlreadyExistsDialog() + + tmp = studiolibrary.createTempPath(self.__class__.__name__) + + self.setPath(tmp) + + self.save(*args, **kwargs) + + shutil.move(tmp, dst) + self.setPath(dst) + + if self.updatePermissionsEnabled(): + self.library().updatePermissions(dst) + + self.syncItemData() + + if self.libraryWindow(): + self.libraryWindow().selectItems([self]) + + self.saved.emit(self) + logger.debug(u'Item Saved: {0}'.format(dst)) + + def save(self, *args, **kwargs): + """ + Save the item io data to the given path. + + :type args: list + :type kwargs: dict + """ + raise NotImplementedError("The save method has not been implemented!") + + # ----------------------------------------------------------------- + # Support for copy and rename + # ----------------------------------------------------------------- + + def delete(self): + """ + Delete the item from disc and the library model. + + :rtype: None + """ + studiolibrary.removePath(self.path()) + + if self.library(): + self.library().removePath(self.path()) + + self.deleted.emit(self) + + def copy(self, dst): + """ + Make a copy/duplicate the current item to the given destination. + + :type dst: str + :rtype: None + """ + src = self.path() + dst = studiolibrary.copyPath(src, dst) + + if self.library(): + self.library().copyPath(src, dst) + + self.copied.emit(self, src, dst) + + if self.libraryWindow(): + self.libraryWindow().refresh() + + def move(self, dst): + """ + Move the current item to the given destination. + + :type dst: str + :rtype: None + """ + self.rename(dst) + + def rename(self, dst, extension=None): + """ + Rename the current path to the given destination path. + + :type dst: str + :type extension: bool or None + :rtype: None + """ + extension = extension or self.EXTENSION + if dst and extension not in dst: + dst += extension + + src = self.path() + + # Rename the path on the filesystem + dst = studiolibrary.renamePath(src, dst) + + # Rename the path inside the library database + if self.library(): + self.library().renamePath(src, dst) + + self._path = dst + + self.syncItemData() + + self.renamed.emit(self, src, dst) + + def showRenameDialog(self, parent=None): + """ + Show the rename dialog. + + :type parent: QtWidgets.QWidget + """ + if self.isVersionPath(): + raise NameError("You can only rename items that were " + "created using Studio Library version 2!") + + select = False + + if self.libraryWindow(): + parent = parent or self.libraryWindow() + select = self.libraryWindow().selectedFolderPath() == self.path() + + name, button = studiolibrary.widgets.MessageBox.input( + parent, + "Rename item", + "Rename the current item to:", + inputText=self.name(), + buttons=[ + ("Rename", QtWidgets.QDialogButtonBox.AcceptRole), + ("Cancel", QtWidgets.QDialogButtonBox.RejectRole) + ] + ) + + if button == "Rename": + try: + self.rename(name) + + if select: + self.libraryWindow().selectFolderPath(self.path()) + + except Exception as error: + self.showExceptionDialog("Rename Error", error) + raise + + return button + + def showMoveDialog(self, parent=None): + """ + Show the move to browser dialog. + + :type parent: QtWidgets.QWidget + """ + if self.isVersionPath(): + raise NameError("You can only move items that were " + "created using Studio Library version 2!") + + title = "Move To..." + path = os.path.dirname(os.path.dirname(self.path())) + + dst = QtWidgets.QFileDialog.getExistingDirectory(None, title, path) + + if dst: + dst = "{}/{}".format(dst, os.path.basename(self.path())) + try: + self.move(dst) + except Exception as error: + self.showExceptionDialog("Move Error", error) + raise + + def showDeleteDialog(self): + """ + Show the delete item dialog. + + :rtype: None + """ + if self.isVersionPath(): + raise NameError("You can only delete items that were " + "created using Studio Library version 2!") + + text = 'Are you sure you want to delete this item?' + + button = self.showQuestionDialog("Delete Item", text) + + if button == QtWidgets.QDialogButtonBox.Yes: + try: + self.delete() + except Exception as error: + self.showExceptionDialog("Delete Error", error) + raise + + def showAlreadyExistsDialog(self): + """ + Show a warning dialog if the item already exists on save. + + :rtype: None + """ + if self.isVersionPath(): + raise NameError("You can only override items that were " + "created using Studio Library version 2!") + + if not self.libraryWindow(): + raise ItemSaveError("Item already exists!") + + title = "Item already exists" + text = 'Would you like to move the existing item "{}" to the trash?' + text = text.format(os.path.basename(self.path())) + + buttons = [ + QtWidgets.QDialogButtonBox.Yes, + QtWidgets.QDialogButtonBox.Cancel + ] + + try: + QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.ArrowCursor) + button = self.libraryWindow().showQuestionDialog(title, text, buttons) + finally: + QtWidgets.QApplication.restoreOverrideCursor() + + if button == QtWidgets.QDialogButtonBox.Yes: + self._moveToTrash() + else: + raise ItemSaveError("You cannot save over an existing item.") + + return button + + # ----------------------------------------------------------------- + # Support for painting the type icon + # ----------------------------------------------------------------- + + def _moveToTrash(self): + """ + Move the current item to the trash. + + This method should only be used when saving. + """ + path = self.path() + library = self.library() + item = studiolibrary.LibraryItem(path, library=library) + self.libraryWindow().moveItemsToTrash([item]) + # self.setPath(path) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/librarywindow.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/librarywindow.py new file mode 100644 index 0000000..ef3f41d --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/librarywindow.py @@ -0,0 +1,2787 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import re +import os +import time +import copy +import logging +import webbrowser +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary +import studiolibrary.widgets + + +__all__ = ["LibraryWindow"] + + +logger = logging.getLogger(__name__) + + +class PreviewFrame(QtWidgets.QFrame): + pass + + +class SidebarFrame(QtWidgets.QFrame): + pass + + +class GlobalSignal(QtCore.QObject): + """ + Triggered for all library instance. + """ + folderSelectionChanged = QtCore.Signal(object, object) + + +class CheckForUpdate(QtCore.QThread): + + finished = QtCore.Signal(object) + + def __init__(self, url): + super(CheckForUpdate, self).__init__() + self.url = url + + def run(self): + info = studiolibrary.checkForUpdates() + self.finished.emit(info) + + +class LibraryWindow(QtWidgets.QWidget): + + _instances = {} + + DEFAULT_NAME = "Default" + DEFAULT_SETTINGS = { + "library": { + "sortBy": ["name:asc"], + "groupBy": ["category:asc"] + }, + "paneSizes": [130, 280, 180], + "geometry": [-1, -1, 820, 780], + "trashFolderVisible": False, + "sidebarWidgetVisible": True, + "previewWidgetVisible": True, + "menuBarWidgetVisible": True, + "statusBarWidgetVisible": True, + "recursiveSearchEnabled": True, + "itemsWidget": { + "spacing": 2, + "padding": 6, + "zoomAmount": 80, + "textVisible": True, + }, + "searchWidget": { + "text": "", + }, + "filterByMenu": { + "Folder": False + }, + "theme": { + "accentColor": "rgb(60, 160, 210)", + "backgroundColor": "rgb(50, 50, 60)", + } + } + + TRASH_ENABLED = True + TEMP_PATH_MENU_ENABLED = False + + DPI_ENABLED = studiolibrary.config.get("scaleFactorEnabled", False) + + ICON_COLOR = QtGui.QColor(255, 255, 255, 200) + ICON_BADGE_COLOR = QtGui.QColor(230, 230, 0) + + # Customize widget classes + SORTBY_MENU_CLASS = studiolibrary.widgets.SortByMenu + GROUPBY_MENU_CLASS = studiolibrary.widgets.GroupByMenu + FILTERBY_MENU_CLASS = studiolibrary.widgets.FilterByMenu + + ITEMS_WIDGET_CLASS = studiolibrary.widgets.ItemsWidget + SEARCH_WIDGET_CLASS = studiolibrary.widgets.SearchWidget + STATUS_WIDGET_CLASS = studiolibrary.widgets.StatusWidget + MENUBAR_WIDGET_CLASS = studiolibrary.widgets.MenuBarWidget + SIDEBAR_WIDGET_CLASS = studiolibrary.widgets.SidebarWidget + + # Customize library classe + LIBRARY_CLASS = studiolibrary.Library + + globalSignal = GlobalSignal() + + # Local signal + loaded = QtCore.Signal() + lockChanged = QtCore.Signal(object) + + itemRenamed = QtCore.Signal(str, str) + itemSelectionChanged = QtCore.Signal(object) + + folderRenamed = QtCore.Signal(str, str) + folderSelectionChanged = QtCore.Signal(object) + + @staticmethod + def instances(): + """ + Return all the LibraryWindow instances that have been initialised. + + :rtype: list[LibraryWindow] + """ + return LibraryWindow._instances.values() + + @staticmethod + def destroyInstances(): + """Delete all library widget instances.""" + for widget in LibraryWindow.instances(): + widget.destroy() + + LibraryWindow._instances = {} + + @classmethod + def instance( + cls, + name="", + path="", + show=True, + lock=False, + superusers=None, + lockRegExp=None, + unlockRegExp=None, + **kwargs + ): + """ + Return the library widget for the given name. + + :type name: str + :type path: str + :type show: bool + :type lock: bool + :type superusers: list[str] + :type lockRegExp: str + :type unlockRegExp: str + + :rtype: LibraryWindow + """ + name = name or studiolibrary.defaultLibrary() + + libraryWindow = LibraryWindow._instances.get(name) + + if not libraryWindow: + studioqt.installFonts(studiolibrary.resource.get("fonts")) + libraryWindow = cls(name=name) + LibraryWindow._instances[name] = libraryWindow + + kwargs_ = { + "lock": lock, + "show": show, + "superusers": superusers, + "lockRegExp": lockRegExp, + "unlockRegExp": unlockRegExp + } + + libraryWindow.setKwargs(kwargs_) + libraryWindow.setLocked(lock) + libraryWindow.setSuperusers(superusers) + libraryWindow.setLockRegExp(lockRegExp) + libraryWindow.setUnlockRegExp(unlockRegExp) + + if path: + libraryWindow.setPath(path) + + if show: + libraryWindow.show(**kwargs) + + return libraryWindow + + def __init__(self, parent=None, name="", path=""): + """ + Create a new instance of the Library Widget. + + :type parent: QtWidgets.QWidget or None + :type name: str + :type path: str + """ + QtWidgets.QWidget.__init__(self, parent) + + self.setObjectName("studiolibrary") + + version = studiolibrary.version() + + self.setWindowIcon(studiolibrary.resource.icon("icon_black")) + + self._dpi = 1.0 + self._path = "" + self._items = [] + self._name = name or self.DEFAULT_NAME + self._theme = None + self._kwargs = {} + self._isDebug = False + self._isLocked = False + self._isLoaded = False + self._previewWidget = None + self._currentItem = None + self._library = None + self._lightbox = None + self._refreshEnabled = False + self._progressBar = None + self._superusers = None + self._lockRegExp = None + self._unlockRegExp = None + self._settingsWidget = None + + self._updateInfo = {} + self._checkForUpdateThread = CheckForUpdate(self) + self._checkForUpdateThread.finished.connect(self.checkForUpdateFinished) + self._checkForUpdateEnabled = True + + self._trashEnabled = self.TRASH_ENABLED + + self._itemsHiddenCount = 0 + self._itemsVisibleCount = 0 + + self._isTrashFolderVisible = False + self._sidebarWidgetVisible = True + self._previewWidgetVisible = True + self._statusBarWidgetVisible = True + + # -------------------------------------------------------------------- + # Create Widgets + # -------------------------------------------------------------------- + + library = self.LIBRARY_CLASS(libraryWindow=self) + library.dataChanged.connect(self.refresh) + library.searchTimeFinished.connect(self._searchFinished) + + self._sidebarFrame = SidebarFrame(self) + self._previewFrame = PreviewFrame(self) + + self._itemsWidget = self.ITEMS_WIDGET_CLASS(self) + self._itemsWidget.installEventFilter(self) + self._itemsWidget.keyPressed.connect(self._keyPressed) + + tip = "Search all current items." + self._searchWidget = self.SEARCH_WIDGET_CLASS(self) + self._searchWidget.setToolTip(tip) + self._searchWidget.setStatusTip(tip) + + self._filterByMenu = self.FILTERBY_MENU_CLASS(self) + self._statusWidget = self.STATUS_WIDGET_CLASS(self) + + # Add the update available button to the status widget + self._updateAvailableButton = QtWidgets.QPushButton(self._statusWidget) + self._updateAvailableButton.setObjectName("updateAvailableButton") + self._updateAvailableButton.setText("Update Available") + self._updateAvailableButton.setCursor(QtCore.Qt.PointingHandCursor) + self._updateAvailableButton.hide() + self._updateAvailableButton.clicked.connect(self.openReleasesUrl) + + self.statusWidget().layout().addWidget(self._updateAvailableButton) + + self._menuBarWidget = self.MENUBAR_WIDGET_CLASS(self) + self._sidebarWidget = self.SIDEBAR_WIDGET_CLASS(self) + + self._filterByMenu.setDataset(library) + self._itemsWidget.setDataset(library) + self._searchWidget.setDataset(library) + self._sidebarWidget.setDataset(library) + + self.setLibrary(library) + + # -------------------------------------------------------------------- + # Setup the menu bar buttons + # -------------------------------------------------------------------- + + iconColor = self.iconColor() + + name = "New Item" + icon = studiolibrary.resource.icon("plus") + tip = "Add a new item to the selected folder" + self.addMenuBarAction(name, icon, tip, callback=self.showNewMenu) + self._menuBarWidget.addWidget(self._searchWidget) + + name = "Filters" + icon = studiolibrary.resource.icon("filter") + tip = "Filter the current results by type.\n" \ + "CTRL + Click will hide the others and show the selected one." + action = self.addMenuBarAction(name, icon, tip, callback=self.showFilterByMenu) + + name = "Item View" + icon = studiolibrary.resource.icon("sliders") + tip = "Change the style of the item view" + self.addMenuBarAction(name, icon, tip, callback=self.showItemViewMenu) + + name = "View" + icon = studiolibrary.resource.icon("columns-3") + tip = "Choose to show/hide both the preview and navigation pane.\n" \ + "CTRL + Click will hide the menu bar as well." + self.addMenuBarAction(name, icon, tip, callback=self.toggleView) + + name = "Sync items" + icon = studiolibrary.resource.icon("arrows-rotate") + tip = "Sync with the filesystem" + self.addMenuBarAction(name, icon, tip, callback=self.sync) + + name = "Settings" + icon = studiolibrary.resource.icon("bars") + tip = "Settings menu" + self.addMenuBarAction(name, icon, tip, callback=self.showSettingsMenu) + + # ------------------------------------------------------------------- + # Setup Layout + # ------------------------------------------------------------------- + + layout = QtWidgets.QVBoxLayout() + layout.setSpacing(0) + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 1, 0, 0) + self._previewFrame.setLayout(layout) + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 1, 0, 0) + + self._sidebarFrame.setLayout(layout) + self._sidebarFrame.layout().addWidget(self._sidebarWidget) + + self._splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal, self) + self._splitter.setSizePolicy(QtWidgets.QSizePolicy.Ignored, + QtWidgets.QSizePolicy.Expanding) + self._splitter.setHandleWidth(2) + self._splitter.setChildrenCollapsible(False) + + self._splitter.insertWidget(0, self._sidebarFrame) + self._splitter.insertWidget(1, self._itemsWidget) + self._splitter.insertWidget(2, self._previewFrame) + + self._splitter.setStretchFactor(0, False) + self._splitter.setStretchFactor(1, True) + self._splitter.setStretchFactor(2, False) + + self.layout().addWidget(self._menuBarWidget) + self.layout().addWidget(self._splitter) + self.layout().addWidget(self._statusWidget) + + vbox = QtWidgets.QVBoxLayout() + self._previewFrame.setLayout(vbox) + self._previewFrame.layout().setSpacing(0) + self._previewFrame.layout().setContentsMargins(0, 0, 0, 0) + self._previewFrame.setMinimumWidth(5) + + # ------------------------------------------------------------------- + # Setup Connections + # ------------------------------------------------------------------- + + itemsWidget = self.itemsWidget() + itemsWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + itemsWidget.itemMoved.connect(self._itemMoved) + itemsWidget.itemDropped.connect(self._itemDropped) + itemsWidget.itemSelectionChanged.connect(self._itemSelectionChanged) + itemsWidget.customContextMenuRequested.connect(self.showItemsContextMenu) + + sidebarWidget = self.sidebarWidget() + sidebarWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + sidebarWidget.itemDropped.connect(self._itemDropped) + sidebarWidget.itemSelectionChanged.connect(self._folderSelectionChanged) + sidebarWidget.customContextMenuRequested.connect(self.showFolderMenu) + sidebarWidget.settingsMenuRequested.connect(self._foldersMenuRequested) + + self.folderSelectionChanged.connect(self.updateLock) + + self.updateMenuBar() + self.updatePreviewWidget() + + if path: + self.setPath(path) + + def _keyPressed(self, event): + """ + Triggered from the items widget on key press event. + + :type event: QKeyEvent + """ + text = event.text().strip() + + if not text.isalpha() and not text.isdigit(): + return + + if text and not self.searchWidget().hasFocus(): + self.searchWidget().setFocus() + self.searchWidget().setText(text) + + def _searchFinished(self): + self.showRefreshMessage() + + def _foldersMenuRequested(self, menu): + """ + Triggered when the folders settings menu has been requested. + + :type menu: QtWidgets.QMenu + """ + # Adding a blank icon fixes the text alignment issue when using Qt 5.12.+ + icon = studiolibrary.resource.icon("blank") + + action = QtWidgets.QAction("Change Path", menu) + action.triggered.connect(self.showChangePathDialog) + action.setIcon(icon) + + menu.addAction(action) + menu.addSeparator() + + def _itemMoved(self, item): + """ + Triggered when the custom order has changed. + + :type item: studiolibrary.LibraryItem + :rtype: None + """ + self.saveCustomOrder() + + def _itemSelectionChanged(self): + """ + Triggered when an item is selected or deselected. + + :rtype: None + """ + item = self.itemsWidget().selectedItem() + + self.setPreviewWidgetFromItem(item) + self.itemSelectionChanged.emit(item) + + def _itemDropped(self, event): + """ + Triggered when items are dropped on the items widget or sidebar widget. + + :type event: QtCore.QEvent + :rtype: None + """ + mimeData = event.mimeData() + + if mimeData.hasUrls(): + urls = mimeData.urls() + path = self.selectedFolderPath() + items = self.createItemsFromUrls(urls) + + if self.isMoveItemsEnabled(): + self.showMoveItemsDialog(items, dst=path) + + elif not self.isCustomOrderEnabled(): + msg = 'Please sort by "Custom Order" to reorder items!' + self.showInfoMessage(msg) + + def _folderSelectionChanged(self): + """ + Triggered when a folder is selected or deselected. + + :rtype: None + """ + path = self.selectedFolderPath() + self.folderSelectionChanged.emit(path) + self.globalSignal.folderSelectionChanged.emit(self, path) + + def isUpdateAvailable(self): + return self._updateAvailable + + def checkForUpdate(self): + """Check if there are any new versions available.""" + self._updateAvailableButton.hide() + if self.isCheckForUpdateEnabled(): + self._checkForUpdateThread.start() + + def checkForUpdateFinished(self, info): + """Triggered when the check for update thread has finished.""" + self._updateInfo = info or {} + if self._updateInfo.get("updateFound"): + self._updateAvailableButton.show() + else: + self._updateAvailableButton.hide() + + def destroy(self): + """Destroy the current library window instance.""" + self.hide() + self.closePreviewWidget() + self.close() + self.itemsWidget().clear() + self.library().clear() + super(LibraryWindow, self).destroy() + + def setKwargs(self, kwargs): + """ + Set the key word arguments used to open the window. + + :type kwargs: dict + """ + self._kwargs.update(kwargs) + + def library(self): + """ + Return the library model object. + + :rtype: studiolibrary.Library + """ + return self._library + + def setLibrary(self, library): + """ + Set the library model. + + :type library: studiolibrary.Library + :rtype: None + """ + self._library = library + + def statusWidget(self): + """ + Return the status widget. + + :rtype: studioqt.StatusWidget + """ + return self._statusWidget + + def searchWidget(self): + """ + Return the search widget. + + :rtype: studioqt.SearchWidget + """ + return self._searchWidget + + def menuBarWidget(self): + """ + Return the menu bar widget. + + :rtype: MenuBarWidget + """ + return self._menuBarWidget + + def name(self): + """ + Return the name of the library. + + :rtype: str + """ + return self._name + + def path(self): + """ + Return the root path for the library. + + :rtype: str + """ + return self._path + + def setPath(self, path): + """ + Set the root path for the library. + + :type path: str + :rtype: None + """ + path = studiolibrary.realPath(path) + + if path == self.path(): + logger.debug("The root path is already set.") + return + + self._path = path + + library = self.library() + library.setPath(path) + + if not os.path.exists(library.databasePath()): + self.sync() + + self.refresh() + self.library().search() + self.updatePreviewWidget() + + @studioqt.showArrowCursor + def showPathErrorDialog(self): + """ + Called when the current root path doesn't exist on refresh. + + :rtype: None + """ + path = self.path() + + title = "Path Error" + + text = 'The current root path does not exist "{path}". ' \ + 'Please select a new root path to continue.' + + text = text.format(path=path) + + dialog = studiolibrary.widgets.createMessageBox(self, title, text) + + dialog.setHeaderColor("rgb(230, 80, 80)") + dialog.show() + + dialog.accepted.connect(self.showChangePathDialog) + + @studioqt.showArrowCursor + def showWelcomeDialog(self): + """ + Called when there is no root path set for the library. + + :rtype: None + """ + name = self.name() + + title = "Welcome" + title = title.format(studiolibrary.version(), name) + text = "Before you get started please choose a folder " \ + "location for storing the data. A network folder is " \ + "recommended for sharing within a studio." + + dialog = studiolibrary.widgets.createMessageBox(self, title, text) + dialog.show() + + dialog.accepted.connect(self.showChangePathDialog) + + def showChangePathDialog(self): + """ + Show a file browser dialog for changing the root path. + + :rtype: None + """ + path = self._showChangePathDialog() + if path: + self.setPath(path) + else: + self.refresh() + + @studioqt.showArrowCursor + def _showChangePathDialog(self): + """ + Open the file dialog for setting a new root path. + + :rtype: str + """ + path = self.path() + + if not path: + path = os.path.expanduser("~") + + path = QtWidgets.QFileDialog.getExistingDirectory( + None, + "Choose a root folder location", + path + ) + + return studiolibrary.normPath(path) + + def isRefreshEnabled(self): + """ + Return True if the LibraryWindow can be refreshed. + + :rtype: bool + """ + return self._refreshEnabled + + def setRefreshEnabled(self, enable): + """ + If enable is False, all updates will be ignored. + + :rtype: bool + """ + self.library().setSearchEnabled(enable) + self._refreshEnabled = enable + + @studioqt.showWaitCursor + def sync(self): + """ + Sync any data that might be out of date with the model. + + :rtype: None + """ + progressBar = self.statusWidget().progressBar() + + @studioqt.showWaitCursor + def _sync(): + elapsedTime = time.time() + self.library().sync(progressCallback=self.setProgressBarValue) + + elapsedTime = time.time() - elapsedTime + + msg = "Synced items in {0:.3f} seconds." + msg = msg.format(elapsedTime) + + self.statusWidget().showInfoMessage(msg) + self.setProgressBarValue("Done") + + studioqt.fadeOut(progressBar, duration=500, onFinished=progressBar.close) + + self.setProgressBarValue("Syncing") + studioqt.fadeIn(progressBar, duration=1, onFinished=_sync) + + progressBar.show() + + def setProgressBarValue(self, label, value=-1): + """Set the progress bar label and value""" + + progressBar = self.statusWidget().progressBar() + + if value == -1: + self.statusWidget().progressBar().reset() + value = 100 + + progressBar.setValue(value) + progressBar.setText(label) + + def refresh(self): + """ + Refresh all sidebar items and library items. + + :rtype: None + """ + if self.isRefreshEnabled(): + self.update() + + def update(self): + """Update the library widget and the data. """ + self.refreshSidebar() + self.updateWindowTitle() + + # ----------------------------------------------------------------- + # Methods for the sidebar widget + # ----------------------------------------------------------------- + + def sidebarWidget(self): + """ + Return the sidebar widget. + + :rtype: studioqt.SidebarWidget + """ + return self._sidebarWidget + + def selectedFolderPath(self): + """ + Return the selected folder items. + + :rtype: str or None + """ + return self.sidebarWidget().selectedPath() + + def selectedFolderPaths(self): + """ + Return the selected folder items. + + :rtype: list[str] + """ + return self.sidebarWidget().selectedPaths() + + def selectFolderPath(self, path): + """ + Select the given folder paths. + + :type path: str + :rtype: None + """ + self.selectFolderPaths([path]) + + def selectFolderPaths(self, paths): + """ + Select the given folder paths. + + :type paths: list[str] + :rtype: None + """ + self.sidebarWidget().selectPaths(paths) + + @studioqt.showWaitCursor + def refreshSidebar(self): + """ + Refresh the state of the sidebar widget. + + :rtype: None + """ + path = self.path() + + if not path: + return self.showWelcomeDialog() + elif not os.path.exists(path): + return self.showPathErrorDialog() + + self.updateSidebar() + + def updateSidebar(self): + """ + Update the folders to be shown in the folders widget. + + :rtype: None + """ + data = {} + root = self.path() + + queries = [{'filters': [('type', 'is', 'Folder')]}] + + items = self.library().findItems(queries) + + for item in items: + data[item.path()] = item.itemData() + + self.sidebarWidget().setData(data, root=root) + + def setFolderData(self, path, data): + """ + Convenience method for setting folder data. + + :type path: str + :type data: dict + """ + self.sidebarWidget().setItemData(path, data) + + def createFolderContextMenu(self): + """ + Return the folder menu for the selected folders. + + :rtype: QtWidgets.QMenu + """ + + path = self.selectedFolderPath() + + items = [] + + if path: + queries = [{"filters": [("path", "is", path)]}] + + items = self.library().findItems(queries) + + if items: + self._items_ = items + + return self.createItemContextMenu(items) + + # ----------------------------------------------------------------- + # Methods for the items widget + # ----------------------------------------------------------------- + + def itemsWidget(self): + """ + Return the widget the contains all the items. + + :rtype: studiolibrary.widgets.ItemsWidget + """ + return self._itemsWidget + + def selectPath(self, path): + """ + Select the item with the given path. + + :type path: str + :rtype: None + """ + self.selectPaths([path]) + + def selectPaths(self, paths): + """ + Select items with the given paths. + + :type paths: list[str] + :rtype: None + """ + selection = self.selectedItems() + + self.clearPreviewWidget() + self.itemsWidget().clearSelection() + self.itemsWidget().selectPaths(paths) + + if self.selectedItems() != selection: + self._itemSelectionChanged() + + def selectItems(self, items): + """ + Select the given items. + + :type items: list[studiolibrary.LibraryItem] + :rtype: None + """ + paths = [item.path() for item in items] + self.selectPaths(paths) + + def scrollToSelectedItem(self): + """ + Scroll the item widget to the selected item. + + :rtype: None + """ + self.itemsWidget().scrollToSelectedItem() + + def refreshSelection(self): + """ + Refresh the current item selection. + + :rtype: None + """ + items = self.selectedItems() + self.itemsWidget().clearSelection() + self.selectItems(items) + + def selectedItems(self): + """ + Return the selected items. + + :rtype: list[studiolibrary.LibraryItem] + """ + return self._itemsWidget.selectedItems() + + def clearItems(self): + """ + Remove all the loaded items. + + :rtype: list[studiolibrary.LibraryItem] + """ + self.itemsWidget().clear() + + def items(self): + """ + Return all the loaded items. + + :rtype: list[studiolibrary.LibraryItem] + """ + return self._items + + def addItem(self, item, select=False): + """ + Add the given item to the itemsWidget. + + :type item: studiolibrary.LibraryItem + :type select: bool + + :rtype: None + """ + self.addItems([item], select=select) + + def addItems(self, items, select=False): + """ + Add the given items to the itemsWidget. + + :type items: list[studiolibrary.LibraryItem] + :type select: bool + + :rtype: None + """ + self.itemsWidget().addItems(items) + self._items.extend(items) + + if select: + self.selectItems(items) + self.scrollToSelectedItem() + + def createItemsFromUrls(self, urls): + """ + Return a new list of items from the given urls. + + :rtype: list[studiolibrary.LibraryItem] + """ + return self.library().itemsFromUrls(urls, libraryWindow=self) + + # ----------------------------------------------------------------- + # Support for custom context menus + # ----------------------------------------------------------------- + + def addMenuBarAction(self, name, icon, tip, callback=None): + """ + Add a button/action to menu bar widget. + + :type name: str + :type icon: QtWidget.QIcon + :type tip: str + :type callback: func + :type: QtWidget.QAction + """ + + # The method below is needed to fix an issue with PySide2. + def _callback(): + callback() + + action = self.menuBarWidget().addAction(name) + + if icon: + action.setIcon(icon) + + if tip: + action.setToolTip(tip) + action.setStatusTip(tip) + + if callback: + action.triggered.connect(_callback) + + return action + + def showFilterByMenu(self): + """ + Show the filters menu. + + :rtype: None + """ + widget = self.menuBarWidget().findToolButton("Filters") + point = widget.mapToGlobal(QtCore.QPoint(0, widget.height())) + self._filterByMenu.show(point) + self.updateMenuBar() + + def showGroupByMenu(self): + """ + Show the group by menu at the group button. + + :rtype: None + """ + widget = self.menuBarWidget().findToolButton("Group By") + point = widget.mapToGlobal(QtCore.QPoint(0, widget.height())) + self._groupByMenu.show(point) + + def showSortByMenu(self): + """ + Show the sort by menu at the sort button. + + :rtype: None + """ + widget = self.menuBarWidget().findToolButton("Sort By") + point = widget.mapToGlobal(QtCore.QPoint(0, widget.height())) + self._sortByMenu.show(point) + + def showItemViewMenu(self): + """ + Show the item settings menu. + + :rtype: None + """ + menu = self.itemsWidget().createSettingsMenu() + widget = self.menuBarWidget().findToolButton("Item View") + + point = widget.mapToGlobal(QtCore.QPoint(0, widget.height())) + menu.exec_(point) + + def createNewItemMenu(self): + """ + Return the create new item menu for adding new folders and items. + + :rtype: QtWidgets.QMenu + """ + color = self.iconColor() + + icon = studiolibrary.resource.icon("add", color=color) + menu = QtWidgets.QMenu(self) + menu.setIcon(icon) + menu.setTitle("New") + + def _sortKey(item): + return item.MENU_ORDER + + for cls in sorted(studiolibrary.registeredItems(), key=_sortKey): + action = cls.createAction(menu, self) + + if action: + icon = studioqt.Icon(action.icon()) + icon.setColor(self.iconColor()) + + action.setIcon(icon) + menu.addAction(action) + + return menu + + def settingsValidator(self, **kwargs): + """ + The validator used for the settings dialog. + + :type kwargs: dict + """ + fields = [] + + color = kwargs.get("accentColor") + if color and self.theme().accentColor().toString() != color: + self.theme().setAccentColor(color) + + color = kwargs.get("backgroundColor") + if color and self.theme().backgroundColor().toString() != color: + self.theme().setBackgroundColor(color) + + path = kwargs.get("path", "") + if not os.path.exists(path): + fields.append( + { + "name": "path", + "value": path, + "error": "Path does not exists!" + } + ) + + scaleFactor = kwargs.get("scaleFactor") + scaleFactorMap = {"Small": 1.0, "Large": 1.5} + value = scaleFactorMap.get(scaleFactor, 1.0) + + if value != self.dpi(): + self.setDpi(value) + + return fields + + def settingsAccepted(self, **kwargs): + """ + Called when the user has accepted the changes in the settings dialog. + + :type kwargs: dict + """ + path = kwargs.get("path") + if path and path != self.path(): + self.setPath(path) + + self.saveSettings() + + def showSettingDialog(self): + """Show the settings dialog.""" + accentColor = self.theme().accentColor().toString() + backgroundColor = self.theme().backgroundColor().toString() + + form = { + "title": "Settings", + "description": "Your local settings", + "layout": "vertical", + "schema": [ + # {"name": "name", "type": "string", "default": self.name()}, + {"name": "path", "type": "path", "value": self.path()}, + { + "name": "accentColor", + "type": "color", + "value": accentColor, + "colors": [ + "rgb(225, 110, 110)", + # "rgb(220, 135, 100)", + "rgb(225, 150, 70)", + "rgb(225, 180, 35)", + "rgb(90, 175, 130)", + "rgb(100, 175, 160)", + "rgb(70, 160, 210)", + # "rgb(5, 135, 245)", + "rgb(30, 145, 245)", + "rgb(110, 125, 220)", + "rgb(100, 120, 150)", + ] + }, + { + "name": "backgroundColor", + "type": "color", + "value": backgroundColor, + "colors": [ + "rgb(45, 45, 48)", + "rgb(55, 55, 60)", + "rgb(68, 68, 70)", + "rgb(80, 60, 80)", + "rgb(85, 60, 60)", + "rgb(60, 75, 75)", + "rgb(60, 64, 79)", + "rgb(245, 245, 255)", + ] + }, + ], + "validator": self.settingsValidator, + "accepted": self.settingsAccepted, + } + + if self.DPI_ENABLED: + value = 'Large' if self.dpi() > 1 else "Small" + + form["schema"].append( + { + "name": "scaleFactor", + "type": "buttonGroup", + "title": "Scale Factor (DPI)", + "value": value, + "items": [ + "Small", + "Large", + ] + }, + ) + + self._settingsWidget = studiolibrary.widgets.FormDialog(form=form) + self._settingsWidget.setObjectName("settingsDialog") + self._settingsWidget.acceptButton().setText("Save") + + self._lightbox = studiolibrary.widgets.Lightbox(self) + self._lightbox.setWidget(self._settingsWidget) + self._lightbox.show() + + def createSettingsMenu(self): + """ + Return the settings menu for changing the library widget. + + :rtype: studioqt.Menu + """ + menu = studioqt.Menu("", self) + menu.setTitle("Settings") + + # Adding a blank icon fixes the text alignment issue when using Qt 5.12.+ + icon = studiolibrary.resource.icon("blank") + + action = menu.addAction("Sync") + action.triggered.connect(self.sync) + action.setIcon(icon) + + menu.addSeparator() + action = menu.addAction("Settings") + action.triggered.connect(self.showSettingDialog) + + menu.addSeparator() + + librariesMenu = studiolibrary.widgets.LibrariesMenu(libraryWindow=self) + menu.addMenu(librariesMenu) + menu.addSeparator() + + action = QtWidgets.QAction("Show Menu", menu) + action.setCheckable(True) + action.setChecked(self.isMenuBarWidgetVisible()) + action.triggered[bool].connect(self.setMenuBarWidgetVisible) + menu.addAction(action) + + action = QtWidgets.QAction("Show Sidebar", menu) + action.setCheckable(True) + action.setChecked(self.isFoldersWidgetVisible()) + action.triggered[bool].connect(self.setFoldersWidgetVisible) + menu.addAction(action) + + action = QtWidgets.QAction("Show Preview", menu) + action.setCheckable(True) + action.setChecked(self.isPreviewWidgetVisible()) + action.triggered[bool].connect(self.setPreviewWidgetVisible) + menu.addAction(action) + + action = QtWidgets.QAction("Show Status", menu) + action.setCheckable(True) + action.setChecked(self.isStatusBarWidgetVisible()) + action.triggered[bool].connect(self.setStatusBarWidgetVisible) + menu.addAction(action) + + menu.addSeparator() + + action = QtWidgets.QAction("Save Settings", menu) + action.triggered.connect(self.saveSettings) + menu.addAction(action) + + action = QtWidgets.QAction("Reset Settings", menu) + action.triggered.connect(self.resetSettings) + menu.addAction(action) + + action = QtWidgets.QAction("Open Settings", menu) + action.triggered.connect(self.openSettings) + menu.addAction(action) + + if self.TEMP_PATH_MENU_ENABLED: + action = QtWidgets.QAction("Open Temp Path", menu) + action.triggered.connect(self.openTempPath) + menu.addAction(action) + + menu.addSeparator() + + if self.trashEnabled(): + action = QtWidgets.QAction("Show Trash Folder", menu) + action.setEnabled(self.trashFolderExists()) + action.setCheckable(True) + action.setChecked(self.isTrashFolderVisible()) + action.triggered[bool].connect(self.setTrashFolderVisible) + menu.addAction(action) + + menu.addSeparator() + + action = QtWidgets.QAction("Enable Recursive Search", menu) + action.setCheckable(True) + action.setChecked(self.isRecursiveSearchEnabled()) + action.triggered[bool].connect(self.setRecursiveSearchEnabled) + menu.addAction(action) + + menu.addSeparator() + + viewMenu = self.itemsWidget().createSettingsMenu() + menu.addMenu(viewMenu) + + menu.addSeparator() + + action = QtWidgets.QAction("Check For Updates", menu) + action.setCheckable(True) + action.setChecked(self.isCheckForUpdateEnabled()) + action.triggered[bool].connect(self.setCheckForUpdateEnabled) + menu.addAction(action) + + action = QtWidgets.QAction("Debug Mode", menu) + action.setCheckable(True) + action.setChecked(self.isDebug()) + action.triggered[bool].connect(self.setDebugMode) + menu.addAction(action) + + menu.addSeparator() + + action = QtWidgets.QAction("Report Issue", menu) + action.triggered.connect(self.openReportUrl) + menu.addAction(action) + + action = QtWidgets.QAction("Help", menu) + action.triggered.connect(self.openHelpUrl) + menu.addAction(action) + + return menu + + def showNewMenu(self): + """ + Creates and shows the new menu at the new action button. + + :rtype: QtWidgets.QAction + """ + menu = self.createNewItemMenu() + + point = self.menuBarWidget().rect().bottomLeft() + point = self.menuBarWidget().mapToGlobal(point) + + return menu.exec_(point) + + def showSettingsMenu(self): + """ + Show the settings menu at the current cursor position. + + :rtype: QtWidgets.QAction + """ + menu = self.createSettingsMenu() + + point = self.menuBarWidget().rect().bottomRight() + point = self.menuBarWidget().mapToGlobal(point) + + # Align menu to the left of the cursor. + menu.move(-1000, -1000) # Fix display bug on linux + menu.show() + x = point.x() - menu.width() + point.setX(x) + + return menu.exec_(point) + + def showFolderMenu(self, pos=None): + """ + Show the folder context menu at the current cursor position. + + :type pos: None or QtCore.QPoint + :rtype: QtWidgets.QAction + """ + menu = self.createFolderContextMenu() + + point = QtGui.QCursor.pos() + point.setX(point.x() + 3) + point.setY(point.y() + 3) + action = menu.exec_(point) + menu.close() + + return action + + def showItemsContextMenu(self, pos=None): + """ + Show the item context menu at the current cursor position. + + :type pos: QtGui.QPoint + :rtype QtWidgets.QAction + """ + items = self.itemsWidget().selectedItems() + + menu = self.createItemContextMenu(items) + + point = QtGui.QCursor.pos() + point.setX(point.x() + 3) + point.setY(point.y() + 3) + action = menu.exec_(point) + menu.close() + + return action + + def createItemContextMenu(self, items): + """ + Return the item context menu for the given items. + + :type items: list[studiolibrary.LibraryItem] + :rtype: studiolibrary.ContextMenu + """ + menu = studioqt.Menu(self) + + item = None + + if items: + item = items[-1] + item.contextMenu(menu) + + if not self.isLocked(): + menu.addMenu(self.createNewItemMenu()) + + if item: + editMenu = studioqt.Menu(menu) + editMenu.setTitle("Edit") + menu.addMenu(editMenu) + + item.contextEditMenu(editMenu) + + if self.trashEnabled(): + editMenu.addSeparator() + + callback = partial(self.showMoveItemsToTrashDialog, items) + + action = QtWidgets.QAction("Move to Trash", editMenu) + action.setEnabled(not self.isTrashSelected()) + action.triggered.connect(callback) + editMenu.addAction(action) + + menu.addSeparator() + + sortByMenu = self.SORTBY_MENU_CLASS("Sort By", menu, self.library()) + menu.addMenu(sortByMenu) + + groupByMenu = self.GROUPBY_MENU_CLASS("Group By", menu, self.library()) + menu.addMenu(groupByMenu) + + menu.addSeparator() + menu.addMenu(self.createSettingsMenu()) + + return menu + + def saveCustomOrder(self): + """ + Convenience method for saving the custom order. + + :rtype: None + """ + self.library().saveItemData(self.library()._items, emitDataChanged=True) + + # ------------------------------------------------------------------- + # Support for moving items with drag and drop + # ------------------------------------------------------------------- + + def isCustomOrderEnabled(self): + """ + Return True if sorting by "Custom Order" is enabled. + + :rtype: bool + """ + return 'Custom Order' in str(self.library().sortBy()) + + def isMoveItemsEnabled(self): + """ + Return True if moving items via drag and drop is enabled. + + :rtype: bool + """ + paths = self.selectedFolderPaths() + + if len(paths) != 1: + return False + + if self.selectedItems(): + return False + + return True + + def createMoveItemsDialog(self): + """ + Create and return a dialog for moving items. + + :rtype: studiolibrary.widgets.MessageBox + """ + text = 'Would you like to copy or move the selected item/s?' + + dialog = studiolibrary.widgets.createMessageBox(self, "Move or Copy items?", text) + dialog.buttonBox().clear() + + dialog.addButton(u'Copy', QtWidgets.QDialogButtonBox.AcceptRole) + dialog.addButton(u'Move', QtWidgets.QDialogButtonBox.AcceptRole) + dialog.addButton(u'Cancel', QtWidgets.QDialogButtonBox.RejectRole) + + return dialog + + def showMoveItemsDialog(self, items, dst): + """ + Show the move items dialog for the given items. + + :type items: list[studiolibrary.LibraryItem] + :type dst: str + :rtype: None + """ + Copy = 0 + Cancel = 2 + + # Check if the items are moving to another folder. + for item in items: + + if item.isVersionPath(): + raise NameError("You can only save items that were " + "created using Studio Library version 2!") + + if os.path.dirname(item.path()) == dst: + return + + dialog = self.createMoveItemsDialog() + action = dialog.exec_() + dialog.close() + + if action == Cancel: + return + + copy = action == Copy + + self.moveItems(items, dst, copy=copy) + + def moveItems(self, items, dst, copy=False, force=False): + """ + Move the given items to the destination folder path. + + :type items: list[studiolibrary.LibraryItem] + :type dst: str + :type copy: bool + :type force: bool + :rtype: None + """ + self.itemsWidget().clearSelection() + + movedItems = [] + + try: + self.library().blockSignals(True) + + for item in items: + + path = dst + "/" + os.path.basename(item.path()) + + if force: + path = studiolibrary.generateUniquePath(path) + + if copy: + item.copy(path) + else: + item.rename(path) + + movedItems.append(item) + + except Exception as error: + self.showExceptionDialog("Move Error", error) + raise + finally: + self.library().blockSignals(False) + + self.refresh() + self.selectItems(movedItems) + self.scrollToSelectedItem() + + # ----------------------------------------------------------------------- + # Support for search + # ----------------------------------------------------------------------- + + def isPreviewWidgetVisible(self): + """ + Return True if the PreviewWidget is visible, otherwise return False. + + :rtype: bool + """ + return self._previewWidgetVisible + + def isFoldersWidgetVisible(self): + """ + Return True if the FoldersWidget is visible, otherwise return False. + + :rtype: bool + """ + return self._sidebarWidgetVisible + + def isStatusBarWidgetVisible(self): + """ + Return True if the StatusWidget is visible, otherwise return False. + + :rtype: bool + """ + return self._statusBarWidgetVisible + + def isMenuBarWidgetVisible(self): + """ + Return True if the MenuBarWidget is visible, otherwise return False. + + :rtype: bool + """ + return self.menuBarWidget().isExpanded() + + def setPreviewWidgetVisible(self, value): + """ + If the value is True then show the PreviewWidget, otherwise hide. + + :type value: bool + """ + value = bool(value) + self._previewWidgetVisible = value + + if value: + self._previewFrame.show() + else: + self._previewFrame.hide() + + self.updateMenuBar() + + def setFoldersWidgetVisible(self, value): + """ + If the value is True then show the FoldersWidget, otherwise hide. + + :type value: bool + """ + value = bool(value) + self._sidebarWidgetVisible = value + + if value: + self._sidebarFrame.show() + else: + self._sidebarFrame.hide() + + self.updateMenuBar() + + def setMenuBarWidgetVisible(self, value): + """ + If the value is True then show the tMenuBarWidget, otherwise hide. + + :type value: bool + """ + value = bool(value) + + if value: + self.menuBarWidget().expand() + else: + self.menuBarWidget().collapse() + + def setStatusBarWidgetVisible(self, value): + """ + If the value is True then show the StatusBarWidget, otherwise hide. + + :type value: bool + """ + value = bool(value) + + self._statusBarWidgetVisible = value + if value: + self.statusWidget().show() + else: + self.statusWidget().hide() + + # ----------------------------------------------------------------------- + # Support for search + # ----------------------------------------------------------------------- + + def itemsVisibleCount(self): + """ + Return the number of items visible. + + :rtype: int + """ + return self._itemsVisibleCount + + def itemsHiddenCount(self): + """ + Return the number of items hidden. + + :rtype: int + """ + return self._itemsHiddenCount + + def setSearchText(self, text): + """ + Set the search widget text.. + + :type text: str + :rtype: None + """ + self.searchWidget().setText(text) + + # ----------------------------------------------------------------------- + # Support for custom preview widgets + # ----------------------------------------------------------------------- + + def setCreateWidget(self, widget): + """ + :type widget: QtWidgets.QWidget + :rtype: None + """ + self.setPreviewWidgetVisible(True) + self.itemsWidget().clearSelection() + + # Force the preview pane to expand when creating a new item. + fsize, rsize, psize = self._splitter.sizes() + if psize < 150: + self.setSizes((fsize, rsize, 180)) + + self.setPreviewWidget(widget) + + def clearPreviewWidget(self): + """ + Set the default preview widget. + """ + self._previewWidget = None + widget = studiolibrary.widgets.PlaceholderWidget() + self.setPreviewWidget(widget) + + def updatePreviewWidget(self): + """Update the current preview widget.""" + self.setPreviewWidgetFromItem(self._currentItem, force=True) + + def setPreviewWidgetFromItem(self, item, force=False): + """ + :type item: studiolibrary.LibraryItem + :rtype: None + """ + if not force and self._currentItem == item: + logger.debug("The current item preview widget is already set.") + return + + self._currentItem = item + + if item: + self.closePreviewWidget() + try: + item.showPreviewWidget(self) + except Exception as error: + self.showErrorMessage(error) + self.clearPreviewWidget() + raise + else: + self.clearPreviewWidget() + + def previewWidget(self): + """ + Return the current preview widget. + + :rtype: QtWidgets.QWidget + """ + return self._previewWidget + + def setPreviewWidget(self, widget): + """ + Set the preview widget. + + :type widget: QtWidgets.QWidget + :rtype: None + """ + if self._previewWidget == widget: + msg = 'Preview widget already contains widget "{0}"' + msg.format(widget) + logger.debug(msg) + else: + self.closePreviewWidget() + self._previewWidget = widget + if self._previewWidget: + self._previewFrame.layout().addWidget(self._previewWidget) + self._previewWidget.show() + + def closePreviewWidget(self): + """ + Close and delete the preview widget. + + :rtype: None + """ + layout = self._previewFrame.layout() + + while layout.count(): + item = layout.takeAt(0) + item.widget().hide() + item.widget().close() + item.widget().deleteLater() + + self._previewWidget = None + + # ----------------------------------------------------------------------- + # Support for saving and loading the widget state + # ----------------------------------------------------------------------- + + def resetSettings(self): + """ + Reset the settings to the default settings. + + :rtype: str + """ + self.setSettings(self.DEFAULT_SETTINGS) + + def geometrySettings(self): + """ + Return the geometry values as a list. + + :rtype: list[int] + """ + settings = ( + self.window().geometry().x(), + self.window().geometry().y(), + self.window().geometry().width(), + self.window().geometry().height() + ) + return settings + + def setGeometrySettings(self, settings): + """ + Set the geometry of the widget with the given values. + + :type settings: list[int] + :rtype: None + """ + x, y, width, height = settings + + pos = QtGui.QCursor.pos() + geometry = QtWidgets.QApplication.screenAt(pos).availableGeometry() + screenWidth = geometry.width() + screenHeight = geometry.height() + + if x <= 0 or y <= 0 or x >= screenWidth or y >= screenHeight: + self.centerWindow(width, height) + else: + self.window().setGeometry(x, y, width, height) + + def settings(self): + """ + Return a dictionary with the widget settings. + + :rtype: dict + """ + settings = {} + + settings['dpi'] = self.dpi() + settings['kwargs'] = self._kwargs + settings['geometry'] = self.geometrySettings() + settings['paneSizes'] = self._splitter.sizes() + + if self.theme(): + settings['theme'] = self.theme().settings() + + settings["library"] = self.library().settings() + settings["trashFolderVisible"] = self.isTrashFolderVisible() + settings["sidebarWidgetVisible"] = self.isFoldersWidgetVisible() + settings["previewWidgetVisible"] = self.isPreviewWidgetVisible() + settings["menuBarWidgetVisible"] = self.isMenuBarWidgetVisible() + settings["statusBarWidgetVisible"] = self.isStatusBarWidgetVisible() + + settings['itemsWidget'] = self.itemsWidget().settings() + settings['searchWidget'] = self.searchWidget().settings() + settings['sidebarWidget'] = self.sidebarWidget().settings() + settings["recursiveSearchEnabled"] = self.isRecursiveSearchEnabled() + settings["checkForUpdateEnabled"] = self.isCheckForUpdateEnabled() + + settings['filterByMenu'] = self._filterByMenu.settings() + + settings["path"] = self.path() + + return settings + + def setSettings(self, settings): + """ + Set the widget settings from the given dictionary. + + :type settings: dict + """ + defaults = copy.deepcopy(self.DEFAULT_SETTINGS) + settings = studiolibrary.update(defaults, settings) + + isRefreshEnabled = self.isRefreshEnabled() + + try: + self.setRefreshEnabled(False) + self.itemsWidget().setToastEnabled(False) + + geometry = settings.get("geometry") + if geometry: + self.setGeometrySettings(geometry) + + themeSettings = settings.get("theme") + if themeSettings: + self.setThemeSettings(themeSettings) + + if not self.path(): + path = settings.get("path") + if path and os.path.exists(path): + self.setPath(path) + + dpi = settings.get("dpi", 1.0) + self.setDpi(dpi) + + sizes = settings.get('paneSizes') + if sizes and len(sizes) == 3: + self.setSizes(sizes) + + value = settings.get("sidebarWidgetVisible") + if value is not None: + self.setFoldersWidgetVisible(value) + + value = settings.get("menuBarWidgetVisible") + if value is not None: + self.setMenuBarWidgetVisible(value) + + value = settings.get("previewWidgetVisible") + if value is not None: + self.setPreviewWidgetVisible(value) + + value = settings.get("statusBarWidgetVisible") + if value is not None: + self.setStatusBarWidgetVisible(value) + + value = settings.get('searchWidget') + if value is not None: + self.searchWidget().setSettings(value) + + value = settings.get("recursiveSearchEnabled") + if value is not None: + self.setRecursiveSearchEnabled(value) + + value = settings.get("checkForUpdateEnabled") or studiolibrary.config.get("checkForUpdateEnabled") + if value is not None: + self.setCheckForUpdateEnabled(value) + + value = settings.get('filterByMenu') + if value is not None: + self._filterByMenu.setSettings(value) + + finally: + self.reloadStyleSheet() + self.setRefreshEnabled(isRefreshEnabled) + self.refresh() + + value = settings.get('library') + if value is not None: + self.library().setSettings(value) + + value = settings.get('trashFolderVisible') + if value is not None: + self.setTrashFolderVisible(value) + + value = settings.get('sidebarWidget', {}) + self.sidebarWidget().setSettings(value) + + value = settings.get('itemsWidget', {}) + self.itemsWidget().setSettings(value) + + self.itemsWidget().setToastEnabled(True) + + self.updateMenuBar() + + def updateSettings(self, settings): + """ + Save the given path to the settings on disc. + + :type settings: dict + :rtype: None + """ + data = self.readSettings() + data.update(settings) + self.saveSettings(data) + + def openTempPath(self): + """Launch the system explorer to the temp directory.""" + path = studiolibrary.tempPath() + studiolibrary.showInFolder(path) + + def openSettings(self): + """Launch the system explorer to the open directory.""" + path = studiolibrary.settingsPath() + studiolibrary.showInFolder(path) + + def saveSettings(self, data=None): + """ + Save the settings to the settings path set in the config. + + :type data: dict or None + :rtype: None + """ + settings = studiolibrary.readSettings() + + settings.setdefault(self.name(), {}) + settings[self.name()].update(data or self.settings()) + + studiolibrary.saveSettings(settings) + + self.showToastMessage("Saved") + + @studioqt.showWaitCursor + def loadSettings(self): + """ + Load the user settings from disc. + + :rtype: None + """ + self.reloadStyleSheet() + settings = self.readSettings() + self.setSettings(settings) + + def readSettings(self): + """ + Get the user settings from disc. + + :rtype: dict + """ + key = self.name() + data = studiolibrary.readSettings() + return data.get(key, {}) + + def isLoaded(self): + """ + Return True if the Studio Library has been shown + + :rtype: bool + """ + return self._isLoaded + + def setLoaded(self, loaded): + """ + Set if the widget has been shown. + + :type loaded: bool + :rtype: None + """ + self._isLoaded = loaded + + def setSizes(self, sizes): + """ + :type sizes: (int, int, int) + :rtype: None + """ + fSize, cSize, pSize = sizes + + if pSize == 0: + pSize = 200 + + if fSize == 0: + fSize = 120 + + self._splitter.setSizes([fSize, cSize, pSize]) + self._splitter.setStretchFactor(1, 1) + + def centerWindow(self, width=None, height=None): + """ + Center the widget to the center of the desktop. + + :rtype: None + """ + geometry = self.frameGeometry() + + if width: + geometry.setWidth(width) + + if height: + geometry.setHeight(height) + + pos = QtGui.QCursor.pos() + screen = QtWidgets.QApplication.screenAt(pos) + centerPoint = screen.availableGeometry().center() + + geometry.moveCenter(centerPoint) + self.window().setGeometry(geometry) + + # ----------------------------------------------------------------------- + # Overloading events + # ----------------------------------------------------------------------- + + def event(self, event): + """ + :type event: QtWidgets.QEvent + :rtype: QtWidgets.QEvent + """ + if isinstance(event, QtGui.QKeyEvent): + if studioqt.isControlModifier() and event.key() == QtCore.Qt.Key_F: + self.searchWidget().setFocus() + + if isinstance(event, QtGui.QStatusTipEvent): + self.statusWidget().showInfoMessage(event.tip()) + + return QtWidgets.QWidget.event(self, event) + + def keyReleaseEvent(self, event): + """ + :type event: QtGui.QKeyEvent + :rtype: None + """ + for item in self.selectedItems(): + item.keyReleaseEvent(event) + QtWidgets.QWidget.keyReleaseEvent(self, event) + + def closeEvent(self, event): + """ + :type event: QtWidgets.QEvent + :rtype: None + """ + self.saveSettings() + QtWidgets.QWidget.closeEvent(self, event) + + def show(self, **kwargs): + """ + Overriding this method to always raise_ the widget on show. + + Developers can use the kwargs to set platform dependent show options used in subclasses. + + :rtype: None + """ + QtWidgets.QWidget.show(self) + self.setWindowState(QtCore.Qt.WindowNoState) + self.raise_() + + def showEvent(self, event): + """ + :type event: QtWidgets.QEvent + :rtype: None + """ + QtWidgets.QWidget.showEvent(self, event) + + if not self.isLoaded(): + self.setLoaded(True) + self.setRefreshEnabled(True) + self.loadSettings() + + # ----------------------------------------------------------------------- + # Support for themes and custom style sheets + # ----------------------------------------------------------------------- + + def dpi(self): + """ + Return the current dpi for the library widget. + + :rtype: float + """ + if not self.DPI_ENABLED: + return 1.0 + + return float(self._dpi) + + def setDpi(self, dpi): + """ + Set the current dpi for the library widget. + + :rtype: float + """ + if not self.DPI_ENABLED: + dpi = 1.0 + + self._dpi = dpi + + self.itemsWidget().setDpi(dpi) + self.menuBarWidget().setDpi(dpi) + self.sidebarWidget().setDpi(dpi) + self.statusWidget().setFixedHeight(20 * dpi) + + self._splitter.setHandleWidth(2 * dpi) + + self.showToastMessage("DPI: {0}".format(int(dpi * 100))) + + self.reloadStyleSheet() + + def iconColor(self): + """ + Return the icon color. + + :rtype: studioqt.Color + """ + return self.ICON_COLOR + + def setThemeSettings(self, settings): + """ + Set the theme from the given settings. + + :type settings: dict + :rtype: None + """ + theme = studiolibrary.widgets.Theme() + theme.setSettings(settings) + self.setTheme(theme) + + def setTheme(self, theme): + """ + Set the theme. + + :type theme: studioqt.Theme + :rtype: None + """ + self._theme = theme + self._theme.updated.connect(self.reloadStyleSheet) + self.reloadStyleSheet() + + def theme(self): + """ + Return the current theme. + + :rtype: studioqt.Theme + """ + if not self._theme: + self._theme = studiolibrary.widgets.Theme() + + return self._theme + + def reloadStyleSheet(self): + """ + Reload the style sheet to the current theme. + + :rtype: None + """ + theme = self.theme() + theme.setDpi(self.dpi()) + + options = theme.options() + styleSheet = theme.styleSheet() + + color = studioqt.Color.fromString(options["ITEM_TEXT_COLOR"]) + self.itemsWidget().setTextColor(color) + + color = studioqt.Color.fromString(options["ITEM_TEXT_SELECTED_COLOR"]) + self.itemsWidget().setTextSelectedColor(color) + + color = studioqt.Color.fromString(options["ITEM_BACKGROUND_COLOR"]) + self.itemsWidget().setItemBackgroundColor(color) + + color = studioqt.Color.fromString(options["BACKGROUND_COLOR"]) + self.itemsWidget().setBackgroundColor(color) + + color = studioqt.Color.fromString( + options["ITEM_BACKGROUND_HOVER_COLOR"]) + self.itemsWidget().setBackgroundHoverColor(color) + + color = studioqt.Color.fromString( + options["ITEM_BACKGROUND_SELECTED_COLOR"]) + self.itemsWidget().setBackgroundSelectedColor(color) + + self.setStyleSheet(styleSheet) + + # Reloading the style sheets is needed for OSX + self.itemsWidget().setStyleSheet(self.itemsWidget().styleSheet()) + self.searchWidget().setStyleSheet(self.searchWidget().styleSheet()) + self.menuBarWidget().setStyleSheet(self.menuBarWidget().styleSheet()) + self.sidebarWidget().setStyleSheet(self.sidebarWidget().styleSheet()) + self.previewWidget().setStyleSheet(self.previewWidget().styleSheet()) + + if self._settingsWidget: + self._settingsWidget.setStyleSheet(self._settingsWidget.styleSheet()) + + self.searchWidget().update() + self.menuBarWidget().update() + self.sidebarWidget().update() + + # ----------------------------------------------------------------------- + # Support for the Trash folder. + # ----------------------------------------------------------------------- + + def trashEnabled(self): + """ + Return True if moving items to trash. + + :rtype: bool + """ + return self._trashEnabled + + def setTrashEnabled(self, enable): + """ + Enable items to be trashed. + + :type enable: bool + :rtype: None + """ + self._trashEnabled = enable + + def isPathInTrash(self, path): + """ + Return True if the given path is in the Trash path. + + :rtype: bool + """ + return "trash" in path.lower() + + def trashPath(self): + """ + Return the trash path for the library. + + :rtype: str + """ + path = self.path() + return u'{0}/{1}'.format(path, "Trash") + + def trashFolderExists(self): + """ + Return True if the trash folder exists. + + :rtype: bool + """ + return os.path.exists(self.trashPath()) + + def createTrashFolder(self): + """ + Create the trash folder if it does not exist. + + :rtype: None + """ + path = self.trashPath() + if not os.path.exists(path): + os.makedirs(path) + + def isTrashFolderVisible(self): + """ + Return True if the trash folder is visible to the user. + + :rtype: bool + """ + return self._isTrashFolderVisible + + def setTrashFolderVisible(self, visible): + """ + Enable the trash folder to be visible to the user. + + :type visible: str + :rtype: None + """ + self._isTrashFolderVisible = visible + + if visible: + query = { + 'name': 'trash_query', + 'filters': [] + } + else: + query = { + 'name': 'trash_query', + 'filters': [('path', 'not_contains', 'Trash')] + } + + self.library().addGlobalQuery(query) + self.updateSidebar() + self.library().search() + + def isTrashSelected(self): + """ + Return True if the selected folders is in the trash. + + :rtype: bool + """ + folders = self.selectedFolderPaths() + for folder in folders: + if self.isPathInTrash(folder): + return True + + items = self.selectedItems() + for item in items: + if self.isPathInTrash(item.path()): + return True + + return False + + def moveItemsToTrash(self, items): + """ + Move the given items to trash path. + + :items items: list[studiolibrary.LibraryItem] + :rtype: None + """ + self.createTrashFolder() + self.moveItems(items, dst=self.trashPath(), force=True) + + def showMoveItemsToTrashDialog(self, items=None): + """ + Show the "Move to trash" dialog for the selected items. + + :type items: list[studiolibrary.LibraryItem] or None + :rtype: None + """ + items = items or self.selectedItems() + + if items: + title = "Move to trash?" + text = "Are you sure you want to move the selected" \ + "item/s to the trash?" + + buttons = [ + ("Move to Trash", QtWidgets.QDialogButtonBox.AcceptRole), + QtWidgets.QDialogButtonBox.Cancel + ] + + result = studiolibrary.widgets.MessageBox.question(self, title, text, buttons=buttons) + + if result != QtWidgets.QDialogButtonBox.Cancel: + self.moveItemsToTrash(items) + + # ----------------------------------------------------------------------- + # Support for message boxes + # ----------------------------------------------------------------------- + + def showToastMessage(self, text, duration=1000): + """ + A convenience method for showing the toast widget with the given text. + + :type text: str + :type duration: int + :rtype: None + """ + self.itemsWidget().showToastMessage(text, duration) + + def showInfoMessage(self, text): + """ + A convenience method for showing an info message to the user. + + :type text: str + :rtype: None + """ + self.statusWidget().showInfoMessage(text) + + def showErrorMessage(self, text): + """ + A convenience method for showing an error message to the user. + + :type text: str + :rtype: None + """ + self.statusWidget().showErrorMessage(text) + self.setStatusBarWidgetVisible(True) + + def showWarningMessage(self, text): + """ + A convenience method for showing a warning message to the user. + + :type text: str + :rtype: None + """ + self.statusWidget().showWarningMessage(text) + self.setStatusBarWidgetVisible(True) + + def showRefreshMessage(self): + """Show how long the current refresh took.""" + itemCount = len(self.library().results()) + elapsedTime = self.library().searchTime() + + plural = "" + if itemCount > 1: + plural = "s" + + msg = "Found {0} item{1} in {2:.3f} seconds." + msg = msg.format(itemCount, plural, elapsedTime) + self.statusWidget().showInfoMessage(msg) + + logger.debug(msg) + + def showInfoDialog(self, title, text): + """ + A convenience method for showing an information dialog to the user. + + :type title: str + :type text: str + :rtype: QMessageBox.StandardButton + """ + buttons = QtWidgets.QDialogButtonBox.Ok + + return studiolibrary.widgets.MessageBox.question(self, title, text, buttons=buttons) + + def showErrorDialog(self, title, text): + """ + A convenience method for showing an error dialog to the user. + + :type title: str + :type text: str + :rtype: QMessageBox.StandardButton + """ + self.showErrorMessage(text) + return studiolibrary.widgets.MessageBox.critical(self, title, text) + + def showExceptionDialog(self, title, error): + """ + A convenience method for showing an error dialog to the user. + + :type title: str + :type error: Exception + :rtype: QMessageBox.StandardButton + """ + logger.exception(error) + self.showErrorDialog(title, error) + + def showQuestionDialog(self, title, text, buttons=None): + """ + A convenience method for showing a question dialog to the user. + + :type title: str + :type text: str + :type buttons: list[QMessageBox.StandardButton] + :rtype: QMessageBox.StandardButton + """ + buttons = buttons or [ + QtWidgets.QDialogButtonBox.Yes, + QtWidgets.QDialogButtonBox.No, + QtWidgets.QDialogButtonBox.Cancel + ] + + return studiolibrary.widgets.MessageBox.question(self, title, text, buttons=buttons) + + def updateWindowTitle(self): + """ + Update the window title with the version and lock status. + + :rtype: None + """ + title = "Studio Library - " + title += studiolibrary.version() + " - " + self.name() + + if self.isLocked(): + title += " (Locked)" + + self.setWindowTitle(title) + + # ----------------------------------------------------------------------- + # Support for locking via regex + # ----------------------------------------------------------------------- + + def isLocked(self): + """ + Return lock state of the library. + + :rtype: bool + """ + return self._isLocked + + def setLocked(self, value): + """ + Set the state of the widget to not editable. + + :type value: bool + :rtype: None + """ + self._isLocked = value + + self.sidebarWidget().setLocked(value) + self.itemsWidget().setLocked(value) + + self.updateMenuBar() + self.updateWindowTitle() + + self.lockChanged.emit(value) + + def superusers(self): + """ + Return the superusers for the widget. + + :rtype: list[str] + """ + return self._superusers + + def setSuperusers(self, superusers): + """ + Set the valid superusers for the library widget. + + This will lock all folders unless the current user is a superuser. + + :type superusers: list[str] + :rtype: None + """ + self._superusers = superusers + self.updateLock() + + def lockRegExp(self): + """ + Return the lock regexp used for locking the widget. + + :rtype: str + """ + return self._lockRegExp + + def setLockRegExp(self, regExp): + """ + Set the lock regexp used for locking the widget. + + Lock only folders that contain the given regExp in their path. + + :type regExp: str + :rtype: None + """ + self._lockRegExp = regExp + self.updateLock() + + def unlockRegExp(self): + """ + Return the unlock regexp used for unlocking the widget. + + :rtype: str + """ + return self._unlockRegExp + + def setUnlockRegExp(self, regExp): + """ + Return the unlock regexp used for locking the widget. + + Unlock only folders that contain the given regExp in their path. + + :type regExp: str + :rtype: None + """ + self._unlockRegExp = regExp + self.updateLock() + + def isLockRegExpEnabled(self): + """ + Return True if either the lockRegExp or unlockRegExp has been set. + + :rtype: bool + """ + return not ( + self.superusers() is None + and self.lockRegExp() is None + and self.unlockRegExp() is None + ) + + def updateLock(self): + """ + Update the lock state for the library. + + This is triggered when the user clicks on a folder. + + :rtype: None + """ + if not self.isLockRegExpEnabled(): + return + + superusers = self.superusers() or [] + reLocked = re.compile(self.lockRegExp() or "") + reUnlocked = re.compile(self.unlockRegExp() or "") + + if studiolibrary.user() in superusers: + self.setLocked(False) + + elif reLocked.match("") and reUnlocked.match(""): + + if superusers: + # Lock if only the superusers arg is used + self.setLocked(True) + else: + # Unlock if no keyword arguments are used + self.setLocked(False) + + else: + folders = self.selectedFolderPaths() + + # Lock the selected folders that match the reLocked regx + if not reLocked.match(""): + for folder in folders: + if reLocked.search(folder): + self.setLocked(True) + return + + self.setLocked(False) + + # Unlock the selected folders that match the reUnlocked regx + if not reUnlocked.match(""): + for folder in folders: + if reUnlocked.search(folder): + self.setLocked(False) + return + + self.setLocked(True) + + # ----------------------------------------------------------------------- + # Misc + # ----------------------------------------------------------------------- + + def isCompactView(self): + """ + Return True if both the folder and preview widget are hidden + + :rtype: bool + """ + return not self.isFoldersWidgetVisible() and not self.isPreviewWidgetVisible() + + def toggleView(self): + """ + Toggle the preview widget and folder widget visible. + + :rtype: None + """ + compact = self.isCompactView() + + if studioqt.isControlModifier(): + compact = False + self.setMenuBarWidgetVisible(compact) + + self.setPreviewWidgetVisible(compact) + self.setFoldersWidgetVisible(compact) + + def updateMenuBar(self): + + # Update view icon + action = self.menuBarWidget().findAction("New Item") + + if self.isLocked(): + icon = studiolibrary.resource.icon("lock") + action.setEnabled(False) + else: + icon = studiolibrary.resource.icon("plus-large") + action.setEnabled(True) + + action.setIcon(icon) + + # Update view icon + action = self.menuBarWidget().findAction("View") + + if not self.isCompactView(): + icon = studiolibrary.resource.icon("eye") + else: + icon = studiolibrary.resource.icon("eye-slash") + + action.setIcon(icon) + + # Update filters icon + action = self.menuBarWidget().findAction("Filters") + + if self._filterByMenu.isActive(): + icon = studiolibrary.resource.icon("filter") + action._badgeColor = self.ICON_BADGE_COLOR + action._badgeEnabled = True + else: + icon = studiolibrary.resource.icon("filter") + + action.setIcon(icon) + + self.menuBarWidget().updateIconColor() + + def isRecursiveSearchEnabled(self): + """ + Return True if recursive search is enabled. + + :rtype: bool + """ + return self.sidebarWidget().isRecursive() + + def setRecursiveSearchEnabled(self, value): + """ + Enable recursive search for searching sub folders. + + :type value: int + + :rtype: None + """ + self.sidebarWidget().setRecursive(value) + + def openHelpUrl(self): + """Open the help URL in a web browse.""" + webbrowser.open(self._updateInfo.get("helpUrl", "https://www.studiolibrary.com")) + + def openReportUrl(self): + """Open the report URL in a web browse.""" + webbrowser.open(self._updateInfo.get("reportUrl", "https://www.studiolibrary.com")) + + def openReleasesUrl(self): + """Open the releases URL in a web browser.""" + webbrowser.open(self._updateInfo.get("releasesUrl", "https://www.studiolibrary.com")) + + def setDebugMode(self, value): + """ + :type value: bool + """ + self._isDebug = value + studiolibrary.setDebugMode(value) + + def setCheckForUpdateEnabled(self, value): + self._checkForUpdateEnabled = value + self.checkForUpdate() + + def isCheckForUpdateEnabled(self): + return self._checkForUpdateEnabled + + def isDebug(self): + """ + :rtype: bool + """ + return self._isDebug diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/main.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/main.py new file mode 100644 index 0000000..aabcc5c --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/main.py @@ -0,0 +1,58 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import studioqt +import studiolibrary + + +def main(*args, **kwargs): + """ + Convenience method for creating/showing a library widget instance. + + return studiolibrary.LibraryWindow.instance( + name="", + path="", + show=True, + lock=False, + superusers=None, + lockRegExp=None, + unlockRegExp=None + ) + + :rtype: studiolibrary.LibraryWindow + """ + # Reload all Studio Library modules when Shift is pressed. + # This is for developers to test their changes in a DCC application. + if studioqt.isShiftModifier(): + import studiolibrary + studiolibrary.reload() + + # Register all the items from the config file. + import studiolibrary + studiolibrary.registerItems() + + if studiolibrary.isMaya(): + from studiolibrarymaya import mayalibrarywindow + libraryWindow = mayalibrarywindow.MayaLibraryWindow.instance(*args, **kwargs) + else: + from studiolibrary import librarywindow + libraryWindow = librarywindow.LibraryWindow.instance(*args, **kwargs) + + return libraryWindow + + +if __name__ == "__main__": + + # Run the Studio Library in a QApplication instance + import studioqt + with studioqt.app(): + studiolibrary.main() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource.py new file mode 100644 index 0000000..7b71aa6 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource.py @@ -0,0 +1,74 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os + +from studioqt import Icon +from studioqt import Pixmap + +from . import utils + + +PATH = os.path.abspath(__file__) +DIRNAME = os.path.dirname(PATH) +RESOURCE_DIRNAME = os.path.join(DIRNAME, "resource") + + +def get(*args): + """ + This is a convenience function for returning the resource path. + + :rtype: str + """ + path = os.path.join(RESOURCE_DIRNAME, *args) + return utils.normPath(path) + + +def icon(*args, **kwargs): + """ + Return an Icon object from the given resource name. + + :rtype: str + """ + path = get("icons", *args) + return Icon(pixmap(path, **kwargs)) + + +def pixmap(name, scope="icons", extension="png", color=None): + """ + Return a Pixmap object from the given resource name. + + :type name: str + :type scope: str + :type extension: str + :type color: str + :rtype: QtWidgets.QPixmap + """ + if name.endswith(".svg"): + extension = "" + + path = "" + + if os.path.exists(name): + path = name + + elif extension: + path = get(scope, name + "." + extension) + if not os.path.exists(path): + path = get(scope, name + ".svg") + + p = Pixmap(path) + + if color: + p.setColor(color) + + return p diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/css/default.css b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/css/default.css new file mode 100644 index 0000000..5cb3cdc --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/css/default.css @@ -0,0 +1,1515 @@ + +/* + -------------------------------------------------------------------------- + Base widgets + -------------------------------------------------------------------------- +*/ + +QWidget { + font-size: 12px; + font-family: Open Sans; + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 180); +} + +QFrame { + background-color: BACKGROUND_COLOR; +} + +QWidget:disabled { + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 100); +} + +QLineEdit, QPushButton, QToolBar, QToolButton, QTabBar, QTabBar::tab { + border: 0px; + background-color: BACKGROUND_COLOR; +} + +MenuBarWidget, MenuBarWidget QToolButton { + color: ACCENT_FOREGROUND_COLOR; + background-color: ACCENT_COLOR; + qproperty-iconSize: 24px; +} + +QToolBar { + spacing: 4px; +} + +MenuBarWidget { + spacing: 2px; +} + +MenuBarWidget QToolButton { + min-height: 28px; + max-height: 28px; + min-width: 28px; + max-width: 28px; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + + +MenuBarWidget QToolButton:Hover { + background-color: rgba(255,255,255,55); +} + +QToolTip { + background-color: rgb(255, 255, 204); + color: black; + border: black solid 1px; + margin: 2px; +} + + +/* + -------------------------------------------------------------------------- + Push Button + -------------------------------------------------------------------------- +*/ + +QPushButton:hover { + background-color: rgba(ACCENT_COLOR_R, ACCENT_COLOR_G, ACCENT_COLOR_B, 200); +} + +QPushButton#updateButton { + color: ACCENT_COLOR; + height: 24px; + margin: 5px; + padding: 5px; + border-radius: 1px; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 220); +} + +QPushButton#acceptButton { + font: bold 12px; + color: ACCENT_FOREGROUND_COLOR; + background-color: rgba(ACCENT_COLOR_R, ACCENT_COLOR_G, ACCENT_COLOR_B, 230); +} + +QPushButton#acceptButton:hover { + background-color: rgba(ACCENT_COLOR_R, ACCENT_COLOR_G, ACCENT_COLOR_B, 250); +} + +/* + -------------------------------------------------------------------------- + Slider + -------------------------------------------------------------------------- +*/ + +QSlider::groove:horizontal { + height: 3px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ + background: rgba(0, 0, 0, 0); +} + +QSlider::handle:horizontal { + background: ACCENT_COLOR; + width: 8px; + height: 2px; + margin: -4px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ + border-radius: 2px; + } + +QSlider::add-page:horizontal { + border: 0px solid #999999; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 50); +} + +QSlider::sub-page:horizontal { + background-color: ACCENT_COLOR; + border-top: 1px solid ACCENT_COLOR; + border-bottom: 1px solid ACCENT_COLOR; +} + +/* + -------------------------------------------------------------------------- + Scroll Bar + -------------------------------------------------------------------------- +*/ + +QScrollBar:vertical { + width: 8px; +} + +QScrollBar:horizontal { + height: 8px; +} + +QScrollBar:vertical, +QScrollBar:horizontal { + margin: 0px; + border: 0px solid grey; + background: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 0); +} + +QScrollBar::handle:vertical, +QScrollBar::handle:horizontal{ + min-height: 0px; + border-radius: 1px; + background: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 25); +} + +QScrollBar::handle:vertical:hover, +QScrollBar::handle:horizontal:hover { + background: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 75); +} + +QScrollBar::add-line:vertical, +QScrollBar::add-line:horizontal { + height: 0px; + border: 0px solid grey; + subcontrol-origin: margin; + subcontrol-position: bottom; + /*background: rgb(80, 80, 80);*/ +} + +QScrollBar::sub-line:vertical, +QScrollBar::sub-line:horizontal { + height: 0px; + border: 0px solid grey; + subcontrol-position: top; + subcontrol-origin: margin; + /*background: rgb(80, 80, 80);*/ +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { + width: 0px; + height: 0px; + border: 0px; + background: white; +} + +QScrollBar::add-page:horizontal, QScrollBar::add-page:vertical, +QScrollBar::sub-page:horizontal, QScrollBar::sub-page:vertical { + background: none; +} + +/* + -------------------------------------------------------------------------- + Header View + -------------------------------------------------------------------------- +*/ + +/* style the sort indicator */ + QHeaderView::up-arrow { + image: url("RESOURCE_DIRNAME/icons/up_arrow.png"); + } + +QHeaderView::down-arrow { + image: url("RESOURCE_DIRNAME/icons/down_arrow.png"); + } + +QAbstractItemView::separator{ + height: 0px; + padding: 0px 0px 0px 0px; + background-color: transparent; +} + +QListView::item, QTreeView::item { + border: 0px; + outline: none; + border-style: solid; + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 10); +} + +QHeaderView::section { + font: 12px; + height: 18px; + border: 0px; + border-right: 1px solid rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 20); + border-bottom: 1px solid rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 20); + padding: 5px; + background-color: rgba(0, 0, 0, 20); +} + +/* + -------------------------------------------------------------------------- + List/Tree View + -------------------------------------------------------------------------- +*/ + +QTreeView { + color: FOREGROUND_COLOR; +} + +QTreeView, QListView, QPushButton { + border: 0px; + outline: none; +} + +QTreeView::item, QTreeView::branch { + height: 22px; + show-decoration-selected: 1; /* make the selection span the entire width of the view */ + background-color: BACKGROUND_COLOR; +} + +QTreeView::item:focus{ + border: 0px; + outline: none; +} + +QTreeView::branch:has-children:!has-siblings:closed, +QTreeView::branch:closed:has-children:has-siblings { + border-image: none; + image: url("RESOURCE_DIRNAME/icons/branch_closed_DARKNESS.png"); +} + +QTreeView::branch:open:has-children:!has-siblings, +QTreeView::branch:open:has-children:has-siblings { + border-image: none; + image: url("RESOURCE_DIRNAME/icons/branch_open_DARKNESS.png"); +} + +QMenu::separator, QListView::item:hover, +QTreeView::branch:hover, QTreeView::item:hover { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 20); +} + +QTreeView::branch:selected, +QFrame#headerFrame > QWidget, QFrame#headerFrame, QMenu::item:selected { + color: ACCENT_FOREGROUND_COLOR; + background-color: ACCENT_COLOR; +} + +QTreeView::item:selected, QTreeView::item:selected:active, +QListView::item:selected, QListView::item:selected:active { + color: ACCENT_FOREGROUND_COLOR; + background-color: ACCENT_COLOR; +} + + + +QCheckBox::indicator, QRadioButton::indicator { + width: 16px; + height: 16px; +} + +QRadioButton::indicator:checked { + image: url("RESOURCE_DIRNAME/icons/radio_button_checked_DARKNESS.png"); +} + +QRadioButton::indicator:unchecked { + image: url("RESOURCE_DIRNAME/icons/radio_button_unchecked_DARKNESS.png"); +} + +QCheckBox::indicator:checked, QMenu::indicator:non-exclusive:checked { + image: url("RESOURCE_DIRNAME/icons/check_box_checked_DARKNESS.png"); +} + +QCheckBox::indicator:unchecked, QMenu::indicator:non-exclusive:unchecked { + image: url("RESOURCE_DIRNAME/icons/check_box_unchecked_DARKNESS.png"); +} + +QCheckBox::indicator:disabled, QMenu::indicator:non-exclusive:disabled { + image: url("RESOURCE_DIRNAME/icons/check_box_unchecked_DARKNESS.png"); +} + + +/* + -------------------------------------------------------------------------- + ComboBox + -------------------------------------------------------------------------- +*/ + +QComboBox { + width: 10px; + border: 0px; + padding-left: 2px; + border-radius: 0px; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 15); +} + +QComboBox::drop-down { + border: 0px; + padding-top: 2px; + background-color: rgba(255, 255, 255, 0); + image: url("RESOURCE_DIRNAME/icons/drop_arrow_DARKNESS.png"); +} + +/*QComboBox::down-arrow {*/ + /*width: 1px;*/ + /*image: url("RESOURCE_DIRNAME/icons/null.png");*/ + /*background-color: rgba(255, 255, 255, 0);*/ +/*}*/ + + +QSpinBox, +QLineEdit, +QComboBox, +QComboBox QAbstractItemView:item { + height: 24px; + padding: 0 4px; + border-radius: 0px; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 15); + border-bottom: 0px solid rgba(255, 255, 255, 50); + selection-color: rgba(255, 255, 255, 230); + selection-background-color: ACCENT_COLOR; +} + +QComboBox, +QLineEdit { + border: 0px; + border-bottom: 2px solid rgba(0,0,0,0); +} + +QComboBox:hover, +QLineEdit:hover { + border: 0px; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 35); +} + +QComboBox:focus, +QLineEdit:focus { + border: 0px; + border-bottom: 2px solid ACCENT_COLOR; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 30); +} + +QLineEdit#filterEdit QAbstractItemView { + border: 2px solid darkgray; + selection-background-color: lightgray; +} + +QComboBox QAbstractItemView { + selection-background-color: ACCENT_COLOR; + selection-color: ACCENT_FOREGROUND_COLOR; +} + +QComboBox QAbstractItemView::item { +} + + +QLabel { + selection-color: ACCENT_FOREGROUND_COLOR; + selection-background-color: ACCENT_COLOR; +} + +/* + -------------------------------------------------------------------------- + Tab bar + -------------------------------------------------------------------------- +*/ + +QTabBar { + qproperty-drawBase: 0; +} + +QTabBar::tab { + border: 0px; + padding-left: 10px; + padding-right: 10px; +} + +QTabBar::tab:first:selected { + background-color: rgba(0, 0, 0, 0); + border-left: 0px solid rgba(0, 0, 0, 0); +} + + +/* + -------------------------------------------------------------------------- + Menu Item + -------------------------------------------------------------------------- +*/ + + +QMenu { + border: 1px solid rgba(250, 250, 250, 25); +} + +QMenu, QMenu QWidget { + font: 12px; + color: FOREGROUND_COLOR; + background-color: BACKGROUND_COLOR; +} + +QMenu::separator { + height: 1px; + padding: 0px 1px 0px 1px; +} + +QMenu::icon { + padding: 4px; +} + +QMenu::indicator:non-exclusive { + width: 14px; + height: 14px; + margin-left: 3px; +} + +QMenu::item { + min-width: 124px; + color: FOREGROUND_COLOR; + padding: 3px; + border: 1px solid rgba(0, 0, 0, 0); +} + + +QMenu::item:disabled { + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 50); +} + +QMenu::item:selected { + color: ACCENT_FOREGROUND_COLOR; + background-color: ACCENT_COLOR; +} + +QMenu::item:selected:disabled { + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 50); + background-color: rgba(ACCENT_COLOR_R, ACCENT_COLOR_G, ACCENT_COLOR_B, 50); +} + +/* + -------------------------------------------------------------------------- + SearchWidget + -------------------------------------------------------------------------- +*/ +/* +SearchWidget { + margin: 2px; + padding: 0px; + min-height: 22; + max-height: 22; + border-radius: 2px; +} +*/ +SearchWidget, SearchWidget QLabel { + font: 18px; + padding: 0px; + padding-top:2px; + color: ACCENT_FOREGROUND_COLOR; + background-color: rgba(255, 255, 255, 0); + selection-background-color: rgba(ACCENT_FOREGROUND_COLOR_R, ACCENT_FOREGROUND_COLOR_G, ACCENT_FOREGROUND_COLOR_B, 210); + selection-color: ACCENT_COLOR; +} + +SearchWidget[hasText=true] { + background-color: rgba(255, 255, 255, 30); + border-bottom: 2px solid rgba(255, 255, 255, 80); +} + +SearchWidget:focus { + border: 0px; + border-bottom: 2px solid rgba(255, 255, 255, 180); + background-color: rgba(255, 255, 255, 30); + selection-background-color: rgba(255, 255, 255, 240); + selection-color: ACCENT_COLOR; +} + +SearchWidget QLabel { + border: 0px; + color: FOREGROUND_COLOR; +} + +SearchWidget QPushButton, SearchWidget QPushButton:hover { + border: 0px; + padding: 0px; + color: ACCENT_FOREGROUND_COLOR; + background-color: rgba(255, 255, 255, 0); +} + +SearchWidget QPushButton { + qproperty-iconSize: 24px; +} +/* + -------------------------------------------------------------------------- + QSplitter + -------------------------------------------------------------------------- +*/ + +QSplitter { + max-width: 2px; + background-color: BACKGROUND_COLOR; +} + +QSplitter:handle { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 10); +} + +QSplitter::handle:hover { + background-color: ACCENT_COLOR; +} + + +/* + -------------------------------------------------------------------------- + Slider Widget Action + -------------------------------------------------------------------------- +*/ + +SliderWidgetAction { + padding-top: 4px; + padding-left: 18px; + padding-right: 4px; +} + +SliderWidgetAction QLabel { + min-width: 50px; +} + + +/* + -------------------------------------------------------------------------- + Separator Widget Action + -------------------------------------------------------------------------- +*/ + +SeparatorWidgetAction { + margin: 2px; + padding-left: 4px; + margin-right: 0px; +} + +SeparatorWidgetAction Line { + min-height: 1px; + max-height: 1px; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 30); +} + +SeparatorWidgetAction QLabel { + min-height:22px; + max-height:22px; + padding-right: 2px; + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 80); +} + + +/* + -------------------------------------------------------------------------- + Other + -------------------------------------------------------------------------- +*/ + + +NavigationFrame { + margin: 2px; +} + +#actionWidget { + margin: 0px; + padding: 0px; +} + +#actionLabel { + padding-left: 5px; + background-color: transparent; +} + +#actionOption { + color: FOREGROUND_COLOR; + margin: 1px; + background-color: rgba(255, 255, 255, 5); +} + +ToastWidget { + max-height: 48px; + font: bold 25px; + border-radius: 5px; + color: rgb(250, 250, 250); + background-color: rgba(0, 0, 0, 200); +} + +/* + -------------------------------------------------------------------------- + TESTING NEW STYLE + -------------------------------------------------------------------------- +*/ +/*!**/ + /*--------------------------------------------------------------------------*/ + /*Folders Widget*/ + /*--------------------------------------------------------------------------*/ +/**!*/ + +/*FoldersWidget,*/ +/*FoldersWidget:item,*/ +/*FoldersWidget:branch {*/ + /*color: rgba(255, 255, 255, 150);*/ + /*background-color: rgb(60, 60, 60);*/ +/*}*/ + + + + + + + +/*!**/ + /*--------------------------------------------------------------------------*/ + /*Preview Frame*/ + /*--------------------------------------------------------------------------*/ +/**!*/ + +/*PreviewFrame {*/ + /*margin: 2px;*/ +/*}*/ + +/*PreviewFrame, PreviewFrame QWidget {*/ + /*color: rgba(255, 255, 255, 150);*/ + /*background-color: rgb(60, 60, 60);*/ +/*}*/ + +PreviewFrame QWidget { + color: FOREGROUND_COLOR; +} + +#previewButtons QPushButton { + color: ACCENT_FOREGROUND_COLOR; + background-color: ACCENT_COLOR; +} + +PreviewFrame QPushButton { + color: FOREGROUND_COLOR; +} + +PreviewFrame QPushButton:hover { + color: ACCENT_FOREGROUND_COLOR; +} + +/* +-------------------------------------------------------------------------- +Status Widget +-------------------------------------------------------------------------- +*/ + +StatusWidget { + color: FOREGROUND_COLOR; + background-color: BACKGROUND_COLOR; + border-top: 1px solid rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 10); +} + + +StatusWidget QLabel { + background-color: transparent; +} + +StatusWidget[status="error"], +StatusWidget[status="error"] QLabel { + color: rgb(240, 240, 240); + background-color: rgb(220, 40, 40); + selection-color: rgb(220, 40, 40); + selection-background-color: rgb(240, 240, 240); +} + +StatusWidget[status="warning"] { + color: rgb(240, 240, 240); + background-color: rgb(240, 170, 0); +} + + +/* +-------------------------------------------------------------------------- +UPDATE AVAILABLE WIDGET +-------------------------------------------------------------------------- +*/ + +#updateAvailableButton { + padding: 2px; + margin: 2px; + font-size: 11px; + color: BACKGROUND_COLOR; + background-color: rgba(FOREGROUND_COLOR_R,FOREGROUND_COLOR_G,FOREGROUND_COLOR_B,150); + border-radius: 2px; +} + +#updateAvailableButton { + padding-left: 5px; + padding-right: 5px; +} + +#updateAvailableButton:hover { + background-color: rgba(FOREGROUND_COLOR_R,FOREGROUND_COLOR_G,FOREGROUND_COLOR_B,200); +} + + +/* +-------------------------------------------------------------------------- +PROGRESS WIDGET +-------------------------------------------------------------------------- +*/ + +ProgressBar, +ProgressBar QLabel { + background-color: transparent; +} + +ProgressBar QLabel { + margin: 0px; + padding: 1px; + min-width: 100px; +} + +ProgressBar QProgressBar{ + margin-top: 4px; + margin-right: 6px; + max-width: 200px; + min-width: 150px; + max-height: 4px; + padding: 0px; + color: rgba(0,0,0,200); + border-radius: 2px; + background-color: rgba(250,250,250,50); +} + +ProgressBar QProgressBar::chunk { + color: white; + background-color: white; + margin: 0px; + max-height: 4px; + border-radius: 2px; +} + + + /*--------------------------------------------------------------------------*/ + /* CUSTOM MESSAGE BOX */ + /*--------------------------------------------------------------------------*/ + +MessageBox { + min-width: 320px; + min-height: 220px; +} + +#messageBoxHeaderLabel { + font: 16px; + color: rgb(255,255,255); +} + +#messageBoxHeaderFrame { + height: 46px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + background-color: rgba(0,0,0,0); +} + +#messageBox { + border-radius: 7px; + background-color: rgba(255,255,255,255); +} + +#messageBox QWidget { + background-color: rgba(255,255,255,0); +} + +#messageBox #messageBoxTitle QLabel { + font: 16px; +} + +#messageBox #messageBoxIcon { + width: 32px; + height: 32px; +} + +#messageBox #messageBoxBody QLabel { + font: 12px; +} + +#messageBox #messageBoxInputEdit { + min-height: 32px; + background-color: rgba(240, 240, 240, 180); +} + +#messageBoxBody QWidget { + color: rgb(100,100,110); +} + +#messageBox QPushButton { + font: 12px; + color: rgba(250, 250, 250, 250); + min-width: 72px; + min-height: 32px; + padding-left: 9px; + padding-right: 9px; + border-radius: 16px; + background-color: rgba(180, 180, 180, 230); +} + +#messageBox QPushButton:focus, #messageBox QPushButton:hover { + color: ACCENT_FOREGROUND_COLOR; + background-color: ACCENT_COLOR; +} + +#messageBox QRadioButton::indicator:checked { + image: url("RESOURCE_DIRNAME/icons/radio_button_checked_black.png"); +} + +#messageBox QRadioButton::indicator:unchecked { + image: url("RESOURCE_DIRNAME/icons/radio_button_unchecked_black.png"); +} + +#messageBox QCheckBox::indicator:checked { + image: url("RESOURCE_DIRNAME/icons/check_box_checked_black.png"); +} + +#messageBox QCheckBox::indicator:unchecked { + image: url("RESOURCE_DIRNAME/icons/check_box_unchecked_black.png"); +} + +#messageBox QCheckBox::indicator:disabled { + image: url("RESOURCE_DIRNAME/icons/check_box_unchecked_black.png"); +} + +#messageBoxFrame { + background-color: rgba(0,0,0,100); +} + +#settingsDialog { + min-width: 300px; + min-height: 300px; + max-width: 400px; + max-height: 400px; +} + +#filterByAction QWidget { + background-color: transparent; +} + +#filterByAction:hover { + background-color: ACCENT_COLOR; + color: ACCENT_FOREGROUND_COLOR; +} + +#filterByAction { + height: 22px; + padding: 3px; + background-color: transparent; +} + +#filterByAction #actionCounter { + padding: 2px; + border-radius: 5px; + background-color: rgba(255,255,255,20); +} + +#filterByAction QCheckBox { + width: 64px; +} + +#filterByAction QCheckBox::indicator { + width: 14px; + height: 14px; + padding-left: 2px; +} + + +/* +---------------------------------------- +Settings Dialog Color Picker +---------------------------------------- +*/ + +#settingsDialog ColorPickerWidget { + margin: 0px; + max-height: 24px; + min-height: 24px; + border-radius: 4px; +} + +#settingsDialog ColorPickerWidget #colorButton[first=true] { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} + +#settingsDialog ColorPickerWidget #colorButton[last=true] { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} + +#settingsDialog ColorPickerWidget #colorButton:checked { + border-bottom: 3px solid rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 180); +} + +/* +---------------------------------------- +Preview Widget Color Picker +---------------------------------------- +*/ + +PreviewWidget ColorPickerWidget { + margin: 0px; + max-height: 14px; + min-height: 14px; +} + +PreviewWidget ColorPickerWidget #colorButton { + max-width: 14px; + min-width: 14px; + border-radius: 7px; +} + +PreviewWidget ColorPickerWidget #colorButton:checked { + border: 2px solid rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 255); +} + + +/* +---------------------------------------- +Icon Picker Action +---------------------------------------- +*/ + +IconPickerWidget { + max-height: 156px; + min-height: 156px; +} + + +#iconPickerAction { + max-height: 120px; + min-height: 120px; + margin-left: 10px; + margin-bottom: 10px; +} + +#iconPickerAction QToolButton { + qproperty-iconSize: 14px; +} + +IconPickerWidget QToolButton { + margin: 5px; + padding: 2px; + align: center; + min-width: 20px; + min-height: 20px; + max-width: 20px; + max-height: 20px; + border-radius: 2px; + qproperty-iconSize: 18px; +} + +IconPickerWidget QToolButton { + color: rgb(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B); +} + +IconPickerWidget QToolButton:checked { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 50); +} + +IconPickerWidget QToolButton:hover { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 75); +} + + +/* +---------------------------------------- +Color Picker Action +---------------------------------------- +*/ + +#colorPickerAction { + max-height: 28px; + min-height: 28px; + margin-left: 10px; +} + +#colorPickerAction #colorButton { + max-width: 12px; + min-width: 12px; + max-height: 12px; + min-height: 12px; + border-radius: 6px; +} + +#colorPickerAction #colorButton:checked { + border: 2px solid rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 255); +} + +Lightbox { + background-color: rgba(0, 0, 0, 100); +} + +#menuButton, +#editButton { + margin-left: 4px; + min-width: 25px; + max-width: 25px; + border-radius: 2px; + text-align: center; + background-color: rgba(0,0,0,20); +} + +#menuButton:hover, +#editButton:hover { + background-color: rgba(100,100,100,20); +} + +#editButton { + min-height: 22px; +} + +/* +#errorLabel { + font-style: italic; +} +*/ + +/* +--------------------------- +Field Widgets +--------------------------- +*/ + +SeparatorFieldWidget > #widget { + min-height: 1px; + max-height: 1px; + font: bold; + margin: 4px; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 20); +} + +TextFieldWidget QTextEdit { + max-height: 92px; +} + +FormWidget QWidget { + text-align: left; +} + +#fieldWidget[layout="vertical"] { + min-height: 44px; +} + +FieldWidget[layout="vertical"] { + margin-bottom: 3px; +} + +FieldWidget[layout="vertical"] #label { + margin-bottom: 2px; +} + +FieldWidget[layout="horizontal"] { + margin-top: 3px; +} + +FieldWidget[layout="horizontal"] #label { + margin: 0px; + margin-right: 4px; +} + +LabelFieldWidget[layout="horizontal"] { + min-height: 16px; + max-height: 16px; + margin-top: 2px; + margin-bottom: 0px; +} + +FieldWidget #label { + min-width: 72px; + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 100); +} + +FieldWidget #label:disabled { + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 25); +} + +FormWidget #titleWidget { + padding: 2px; + margin:0px; + padding-left: 5px; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 20); + border-bottom: 0px solid rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 20); +} + +FormWidget #titleWidget:checked { + background-color: rgba(255, 255, 255, 5); +} + +FormWidget #optionsFrame { + margin: 0px; +} + +FieldWidget QComboBox { + border: 1px solid transparent; +} + +/* +--------------------------- +Group Box Widget +--------------------------- +*/ + +GroupFieldWidget[layout="horizontal"] { + margin-top: 2px; + margin-bottom: 0px; +} + +GroupBoxWidget { + margin-top: 3px; +} + +GroupBoxWidget #title { + padding: 2px; + padding-left: 5px; + text-align: left; + border-radius: 2px; + min-height: 18px; + max-height: 18px; + icon-size: 18px; + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 150); + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 10); +} + +GroupBoxWidget #title:checked { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 15); +} + +GroupBoxWidget #title:hover { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 20); +} + +/* +--------------------------- +Save Widget & Load Widget +--------------------------- +*/ + +BaseSaveWidget #fieldWidget { + margin-top: 4px; +} + +PreviewWidget ImageSequenceWidget { + background-color: rgba(0,0,0,0); +} + +PreviewWidget #titleLabel, +BaseSaveWidget #titleLabel, +BaseLoadWidget #titleLabel { + font-size: 14px; +} + +BaseLoadWidget #blendEdit { + min-width: 32px; + max-width: 32px; +} + +BaseSaveWidget #acceptButton, +BaseLoadWidget #acceptButton { + min-width: 80px; + max-height: 35px; + max-width: 125px; + min-height: 35px; + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} + +BaseSaveWidget #selectionSetButton, +BaseLoadWidget #selectionSetButton { + min-width: 35px; + max-width: 35px; + min-height: 35px; + max-height: 35px; + margin-left: 1px; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} + +BaseSaveWidget ImageSequenceWidget { + border-radius: 2px; + color: rgb(40, 40, 40); + border: 1px solid rgba(254, 255, 230, 200); + background-color: rgba(254, 255, 230, 200); +} + +BaseSaveWidget ImageSequenceWidget { + border: 0px solid rgba(254, 255, 230, 200); +} + +/* +--------------------------- +Form Widget +--------------------------- +*/ + +FormWidget #fieldWidget { + margin-top: 4px; +} + +FormWidget #titleLabel, +FormWidget #titleLabel, +FormWidget #titleLabel { + font-size: 14px; +} + +FormWidget QLineEdit, +FormWidget QTextEdit, +FormWidget QComboBox, +FormWidget #thumbnailButton, +FormWidget QLineEdit, +FormWidget QTextEdit, +FormWidget QComboBox, +FormWidget #thumbnailButton, +FormWidget QLineEdit, +FormWidget QTextEdit, +FormWidget QComboBox, +FormWidget #thumbnailButton { + border-radius: 2px; +} + +FormWidget QLineEdit, +FormWidget QLineEdit:focus, +FormWidget QLineEdit:hover, +FormWidget QTextEdit, +FormWidget QTextEdit:focus, +FormWidget QTextEdit:hover, +FormWidget QPlainTextEdit, +FormWidget QPlainTextEdit:focus, +FormWidget QPlainTextEdit:hover { + color: rgb(40, 40, 40); + border: 1px solid rgba(254, 255, 230, 200); + background-color: rgba(254, 255, 230, 200); +} + +FormDialog { + padding: 5px; + border-radius:3px; +} + +FormDialog #title { + padding: 4px; + font-size: 18px; +} + +FormDialog FieldWidget QLabel { + background-color: rgba(200,200,100, 0); +} + +FormDialog FieldWidget { + padding-bottom: 10px; +} + +FormDialog #description { + padding: 4px; + padding-bottom: 9px; + margin-bottom: 10px; + border-bottom: 1px solid rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 15); +} + +FormDialog #acceptButton, +FormDialog #rejectButton { + margin: 2px; + font-size: 14px; + padding: 4px; + min-width: 72px; + min-height: 24px; + border-radius: 2px; +} + +FormDialog #acceptButton, +FormDialog #rejectButton { + background-color: rgba(0,0,0,0); +} + +FormDialog #acceptButton:disabled, +FormDialog #rejectButton:disabled { + color: rgba(250, 250, 250, 50); +} + +#acceptButton, +#rejectButton { + background-color: rgba(0,0,0,0); +} + +#acceptButton:disabled, +#rejectButton:disabled { + color: rgba(250,250,250,50); +} + +#acceptButton { + color: FOREGROUND_COLOR; +} + +#acceptButton:hover { + color: ACCENT_FOREGROUND_COLOR; + background-color: rgba(ACCENT_COLOR_R, ACCENT_COLOR_G, ACCENT_COLOR_B, 220); +} + +FormDialog #acceptButton:pressed { + background-color: rgba(ACCENT_COLOR_R, ACCENT_COLOR_G, ACCENT_COLOR_B, 220); +} + +FormDialog #rejectButton:hover { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 50); +} + +#acceptButton:pressed { + background-color: rgba(ACCENT_COLOR_R, ACCENT_COLOR_G, ACCENT_COLOR_B, 220); +} + +#rejectButton:hover { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B,50); +} + +FormDialog FieldWidget QLineEdit, +FormDialog FieldWidget QTextEdit { + border-radius: 3px; +} + +FieldWidget[error=true] QLineEdit:focus, +FieldWidget[error=true] QTextEdit:focus { + border-color: rgb(250, 80, 80); +} + +FieldWidget[error=true] QLineEdit, +FieldWidget[error=true] QTextEdit { + color: rgba(255,255,255,200); + border-color: rgb(230, 80, 80); + background-color: rgba(230, 80, 80, 50); +} + + +ButtonGroupFieldWidget QPushButton { + height: 24px; + margin: 1px; + text-align: center; + color: FOREGROUND_COLOR; + background-color: rgba(0, 0, 0, 30); +} + +ButtonGroupFieldWidget QPushButton[first=true] { + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; +} + +ButtonGroupFieldWidget QPushButton[last=true] { + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; +} + +ButtonGroupFieldWidget QPushButton:checked { + color: ACCENT_FOREGROUND_COLOR; + background-color: rgba(ACCENT_COLOR_R, ACCENT_COLOR_G, ACCENT_COLOR_B, 220); +} + + +/* +FieldWidget[default=false] QLineEdit, +FieldWidget[default=false] QTextEdit { + border: 1px solid rgba(240, 150, 0, 255); + background-color: rgba(240, 150, 0, 100); +} + +FieldWidget[default=true] QComboBox { + border-radius: 2px; + border: 1px solid rgba(150, 150, 150, 100); +} + +FieldWidget[default=false] QComboBox { + border-radius: 2px; + border: 1px solid rgba(240, 150, 0, 255); + background-color: rgba(240, 150, 0, 100); +} + +FieldWidget[default=false] QRadioButton:checked { + color: rgb(240, 150, 0); +} + +FieldWidget[default=false] #label { + color: rgb(240, 150, 0); +} + + +FieldWidget[error=true] QRadioButton:checked { + color: rgb(240, 0, 0); +} + +FieldWidget[error=true] #label { + color: rgb(240, 0, 0); +} +*/ + +BaseLoadWidget ImageSequenceWidget { + background-color: rgba(0,0,0,0); +} + +/* +DIALOG +*/ + +QDialog QPushButton { + text-align: center; + min-height: 32px; + min-width: 80px; + border-radius: 2px; +} + +QDialog QPushButton:focus { + color: ACCENT_FOREGROUND_COLOR; + background-color: ACCENT_COLOR; +} + +QDialog QPushButton { + color: FOREGROUND_COLOR; + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 30); +} + +QDialog QPushButton:hover { + background-color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 50); +} + +/* +-------------------------------------------------------------------------- +TITLE WIDGET +-------------------------------------------------------------------------- +*/ +#titleWidget #titleButton { + font: bold; + margin: 0px; + padding: 0px; + padding-left: 4px; + text-align: left; + font-size: 14px; + min-height: 28px; + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 210); + background-color: transparent; +} + + +#titleWidget #titleButton:hover { + background-color: rgba(250,250,250,0); +} + +#titleWidget #menuButton { + margin-left: 4px; + margin-right: 4px; + font-size: 14px; + max-height: 22px; + max-width: 22px; + background-color: transparent; +} + +#titleWidget #menuButton:hover { + background-color: rgba(250,250,250,25); +} + + + +#titleWidget +{ + margin: 0px; + min-height: 26px; + background-color: rgba(0,0,0,15); + border-bottom: 1px solid rgba(250, 250, 250, 20); +} + +#titleWidget LineEdit { + margin-left: 4px; + margin-right: 4px; + margin-bottom: 4px; + min-height: 22px; + font-size: 12px; +} + +#titleWidget LineEdit #icon { + margin-top: -3px; + margin-left: 4px; +} + +#titleWidget LineEdit #clear { + margin-top: -3px; + margin-right: 2px; +} + +SidebarWidget #titleWidget LineEdit { + border: 0px solid rbga(0,0,0,0); + border-radius: 3px; +} \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/LICENSE.txt b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Bold.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7b529456032abf9132194ddaac62d2d163247c38 GIT binary patch literal 224452 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%0AFPX_$oWVSJ?r+$`0^Vc7U(41ALVo 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 NJ^r4-t1mN*{|BJyceVfk literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-BoldItalic.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a670e14265a806cffbc66ea3be0083e14369fffa GIT binary patch literal 213168 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 O@X$rl_^04m%Krh`A8cd* literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-ExtraBold.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3660681d398100fd0e2dcffa089570eea893629d GIT binary patch literal 222424 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

-5d!dcM^@c6Oo zF_w8bh9h_+E*9Qka7c)iJCrZpsHXeUH}nxMbbqJVTJU^s6r)fvG;^b{7!fT88R|)} zo3u(Tjf@OchQ>IJTD?U-$g7PS>eXtA#lVHhWMPB6vS4@s9Tt{t4l&=YOE{Cc7))@n z<_;{nv$9wKGZ0lUQg{Iw3OM2XjN`P&-+yjDTUb|hqT0v4yD(h9Em1#K$;wB*<#g zAh;4$=#>YP;6g7V{WM_x^y=F)Y`!JD7WBX*VE{G8*Kyes2cV;G!MS`?S$jmVC zecrrq@o3J3q3+QB;#s;(r^{a7vuwzaiu__>vG}q06IT8wB6{|k&UU_XHdmI2XC9uH zwX$*b3Tgz`Rshy0VAzV?5~~H~7}g{>M6LyV24Vz!!JY8=-6m#iWq}0?TYItvivjBu zqnukQelK33nKb&?zL|xO3>epNa&OB93++zBXgJNR5HHzW>z0YvYQ>Yaz!Dp|1z3XD z1CP;e6T%GUpdf=_0BNl{qA@9mBC^n{Fc9lKVBCi$zii54;ttb8x%@|gwRkqkz0!y z?sS8?;*PETkW6qdE3#0~U2NKk)#{KIG{B`CBvv@$;j=ZAvV^a@5$e2~3w_$BJJpw}FVc9tZrI zP%FnNutORWs<#?ta48GC3aegYEbwY5FNqCSA<_m4gH2k$G0!ld|Cn>?%m7NIFqJ|= ztkuo;`9*AOZh7P5l9gl1i}I5bf8mST4)I0r*O)JV7#iJf$?A{wB2O%$MR*N3Oh9a{ zKUw0*Pca&WutZH{q%Fjj!0|DCutAsU$&5)135kix@o)+HFt<+U1`G5W>J@A%Ug6T| z6bg&W)o-ZRWw3M~;*g zZn%%wL*cf^)AuXUCg)IWArGki&F=xJ^9ri+HCkeQ577 zm33|3+cw6E84aVJdbwfzrkqjp8+-Me-6%|bC%gC1H$GN|heX-L_s)K^W5cOF!4rCB z4DS`cYwnw;b@Ds%o_z{?CA<3YWA;^4w1S2(ioyj+n_x9htU(%uLTOco1P3XNM!wK% zG^pU{fOhWtwnqGcQ!M8g|1*iOO1gt>+!*=NWi_K&f{nq{Yjgd(=ef!M*zvZglUu%Q ze!sHl;<0u(PaIi@FPl6AvYoscyn;`N5 z+IEg04PllXZ8-Q$7s@+=@y?jZJr}qe0iI}tPNr6CG)5D$7T{Kyv_vU07qVP>&ehKASd=7f;D8?OV1sGpPhcIp7+24fY^n zkB~jW?hKiJhV|o-(=qI!mDFCb0FvV*gFLapMq{K>sZt@C-HH7?SA^AS3KN3Df(pI1 zFoRjIA|}QR;D$~)mIQ%;?uQ?SA43@ZiV`UaQCZsp`vm5Yz`9XO^O zz{ID9B)>fM*NL{CFHbu8KG!gF=H?fWnuhv?w?u<5byZ2(`hsDfdHqJyHD;)7}SL03^n;Wdn*PR{Ft6+duR0Id1ZdnJw>21DBTm z{WwPT+ms_1RSS;+QGg)187uIxa8+=DS7qQ01zxO)JIw7LL;(<6mvu>S5{_VHa|63` zXK51Ey+p~%_L!0}qX!QeQ&qxc!`Pjq{VBwNx}OsNz5kg_o1R&_?pZ*w44Uo?pfD3V zG6ig*T1afPQHi8?K}&QxOQBb1Q0bMCB;u}N3kYwQ-2%pEFl+IFNC>FnmYe|uffWJc zpB~4jR4gB8G6609vrJRpKm6BA;=2|3d`bD>ygW;G@!TjeTkd`O1@R;C8a#nx{Dk?9 zwr3t+y#ASm3|oM+1#p^3H1ks;`Cw&Gke1il>_L%gy%A|I@^HxyFyDn!vS9c4DUw*q zVp!e~;~kc6iChZF`esPh7mG#u!@Ga`^1U++$|zbUHfpss-Mz!hs&|&bs8a4M9zipejVe)!V_^s z%T1wLAjK7Dw8aJmDZ*?*q}m!;?6n$r^`NdSgbYEZ5SZBFAfOtgj5&WW0Mo}-MyI`m z!35z#qB;KhZ~uJkt?{ETj9ggw@|H($UV7-*NL@dotNben; zlIMATK}&0DN}Dq^B`Pr|wHiv9vYlRjI)0D9$}&-cR0fMhqcY*```{3b*O4UP zy_`r+ro`{=@RNb4fIr>@Sp6vo%-3LhPt34q`2*_~?!d5V!`9Rs+qYt09o&v!@q6ls z7q7-d9r=i!-!}iJtKvnma2kVSDSWukq_=Q-dO|cxq+eRFg&NGsOe(!hSJ>%{Gp_>5 z$B!q5vMvrdQ{=&cFfP9@H6-oy+g0v!4CmS z>rmk;M%9r_k4ZJiZP?*Bb_;DwzOZ+ZHYhecgE53QaK3CjD5ASWI?}%IJ3^DJ$cg2BRE|(;JK>N3U z*8VQ7#BLq+iO@V(07ozx=?T?XEC$5K1j@`>r~&j1!6g%Z%Ih-19e_hXDs7Od&>Iw? zM07bP4ITjkT<#>voH1<;x6uM>K-J*j7P56ASo8F^7JBiJM51uD7=`uI?x9 z<}(mKaDuDDOu@X(rV9>s#;PJBTux#%D#IgODue_4q+oMqLrDEgH8w=p%9ZUQ8+Du& z&XIy`SVFdfLyRn$mFePsGnY*G@~Af_ZpOkz4|OXjIrhc)Cm-U@dWVZEn{veOc)YhH z{xYM{q_xbMBK{EH-O7vKdseRgt+Wad(j{Upx2D5yL3~z_@eznB-1S>n#Dy+l=>>Aj zZ#^)lT+AsObBaM^HPoQB34#S{_1G|_GloqmEL>12rSOL2ld~xy9oer+CG{k&b3s8P zw*J|^L!q~V4IQ=j!G`(=rcA7x z#?`i!$c&@w>&8^o)?prtp@oZpKGq1%gpVZ* z(XN~vmZAXGVJoGMRlOudEVI*}!VX*2v93n~dj?k5>830$ieA zPHk2V?y|NoGrabejmETHqlt-(uj{dFSdG1jXj0)x3e%f3DyHx-IGT7|eu<)=^ zUKLWe&3cnbk1WbiA}hZ)_sWE|UBH{Y2VA5LFo-+i>}*>YiyY>FAiXjJp*n~IcmC6( z)7CZg&SI)(8@KJw#o^iEyLNpqJ5wfJ%E~RAEdHyed8qgn%}(hvq}K#$o%8uupj-{P zjkrjwlwIG~6JyYtRkDz9P6_`lCK5kbn~)e{HiUCp6?CW7YD47BpLGM34wM?*h7XW} z6N1&fIXx>rD+C-Ak`=<1n~D%cJX1-E_^dcr7iaUe#09U-FRvV3@yMGC6B8R>eZ*T? zJ7n&G`H7Sa&+J`Z-n-W@?!0%@+=KHIlNat=Fr>b^Z0>=%@vfN%=9Z1=HEd|_-ou6i z+t`Q|b|ZQkOlEj`=}Z=rHOOcrDjD9AQNw3K#wvogp^%*rxyfv*Lngnp zJ?y7du9Z?LJ2ELl4J?@m(RirbyOxWoTEFt?JOClUwr;D_%8Dbync-#y(ca1>CC$&&3PE+QgLjlf%0 zudtpy6Znh_Q-Ud4867*+8y&3F4fQH%=lTF~CN?+e6R>*H39~kgtcVXto?VE71;LnO z$MQpv04Ti}6raIDIm`j_27oVh?pzPERbK(3^L9=B3m>y`rV!%Y+`qNkuV*JI4=g>|5Quet*Ty?w*=% z{d(q1m^0m7+B>Chc15Bc^SvZ|CxpnIude(8qwUg|l3`=V4l5Z$FO4ZJ9Xqyk_-NVE!6QZvDjZo>Ja|M!QQ^oD&}L)sRz@Fa z94oTBGN5&AyiR4-nd5rI1^0*!j?T=IX^2sSPk6T&b6R+Z)e0m=b;1F@l5h-4N-;Ww z5v>fO4!p_&2~SoFhaI+9E(>0PJ1y3fk+o)k{3pKPnC;q&>Mf`aye`?;GMGxnF>-p`2n7uf zcbF9#jYHvZ#Zmn7lMtgpgj*o`U^dwg(^wLlgz`?Wmt9~5la2TL++d+Vd{Pn57T&Pd z0gZqFG}kA&=Zvzc3pT%7i3F*-j3HCjj$YX!md3`U^)0XAzFs&aXW{f&(^P^y(HR}K z%N@0$NzD1l9y_#8Fq3n{&Pk~(UP!?LIEeJ}gz<6#djXuF4$>&KT5Jnz^jeur2Zs0W z2e5Z2BpYBjf&c+PM-4Vd;ywOd{;HTRrJ>?AY7qY^&gXI5feLcC4;UE%I~KH)#!l_&lB8MaCthz4f8f}X59+Ox`?LZ6tM{bJ1ZWH7G8uye7HkkyJ>oi8k(bMZf&{CevZ_`1 z{0EN2jtGd;As`)$iP}#ziEI#VyvpX^qWAC6BMXZDA3Q3&mOJ*-_xT6KrAb*S@#5|Oi&?4fw%meb12qth_k^%Z!@*|_ ztbv%u#5Rrm&P_opx7=b}lEeMP;|&h@ClT1GQ4xb7GRmwCW3<65V!%g0*)jHHnvIEP zTvivml`~=Q#EE++jDNWf-#-n_%p5wnSFgcB6)x26nJ|9$#0k46qzx@eO&>m-jaLK$ z_LId!OX=a~hUygxq=IR%`Oj-Kcp*`%L9UWqU>i$}2i^X+IVFB%;)MUZT3^!q_`3Ja z8*vr?E4R1v?VF9_VP+S=hyA!>?kD&mc;nAwl^cz)0(db*LqfxpIvW=pOzl7u;t6-v zq(prQXHx1ZOV0O;DSKDL!Tr=;{dxI-0mDZ>Rr<=Tr=APXs@_0HbH!&rE3b;_UAb#e z|HmHcQ8sEEelH(b&gQNotCZ!!+N@du-VTB4&>9t5MO?gKg{Q8zM>%c!AhiQfu$3aS zzxQ&a#EI}I;2KJ1 zm*p0nQq>fx8R(MC- zpN(Y=*7NLzEM^`%HLb+X9VS0mioUYlSnlR~ySBae&Wl?=6tjD#Pn=jQl=bE%B~>(_)WVfgej@Ifw*lVk%CLrMXVamUB#&{Pqn-O=2y7jlp5s zBPBPZX!A)2QK5e zzWlfCZ=eq0S;B;z%zqn*eHBIzE_FsmM_U(bOJ)gKfwn1~Z50Oydv}brBqPvk33LW} z6;jYLj?BhpfC7Cl0e^Jq6}WJTErMED4F4n!5lovSA|f1OtW%oJ@wx&ry5qa`oGe~j{o(FMT8DdbySwSQv9+~h ztB`Fk{W2#q$Q3iWIQUhV8ySd{;4-3o6?^${Bq`$$TFilF|6g0s!DNZQMby20EbJHs zcQ^Z6gx=d?c1H^`nJh*N^=mxmlA7FwWJpIFT1pO*1;pS{p;3RAOD5}2l8hiS=YwHY zq=3eH>;O#lWNUQz)o}wa$jxS|*6EBaHH6?LA-v0GK+={PDc1(IK~3dmm6V{2{27Xb z#f~g!f3yqo7n;Iy8KgBBGYo!mF+J(`qM0UO8*nUuh;^{!O5w<gPY34TiXo{?}! ztsOXI`Q6c7TFfC6?rX6DEn@Drpo4uk{4F}E&HCUJj1K-$Ci}jS=)h4&2OWIhBYcu0 z_0ruBiTKrh;}oF9D_vU5=@_R2R>oI+)7=(;Wb}QIV0^wtg2X?{WZ$5BA%WCklT^x~ z*CIY#>~UFwOu@lQxex>wH9W#9SICFql~9GCQW=MNk;}uf!I2r&MfUEAX-E!_6!kI? z&=JuKqr={jX>Y`;`fj%U!i8P(?a!a@%(&;=)WZ$*XWb(U`u(5JVWz;TT&G~%k7y=d zsV+lYm`M=rDS_AERWc)Pl2h(Dwcob7;>0-U3p1!r#JqZyyW}X%yVO;%^as zZwp3!KOB?EYiPlwFv(AS*sVsY7PP_^Se7UcacV_! zJOT^14pJR89~OV2x$TXs~eF^O|BbDGz-ABdvQ<_+w~IZk?F!GaIy(=6>c zYtF+9-VqlpsAylO|K#t_m2(RtL1!tOQ=($802K`qerZGpe(!HFhbI2-EkMNOyib@5<4JoBcEw3U~ zid(H!YZW1L^8Y^P-kBuWzQ6aMe6r2lob@@+dDibE9>K|>b50SBh}(h|ke*~gurvj1 z`vVkvYVi$jQlY~c^=N7EH^KT6D@;Bd7LS(pSNx}V>2-73228ssVESvrp>uk~G~`pn zzMe#6Oa-ix9lWLxVr?X;LsEy5)TEN6&XrPL$dr_tYC>vFu&l7Q31tNQu3&wWOZOiO zqpj}!yG~)C+%7Rb2eO8AqYwm~w&B6#6BH^%9t=kiXFKPHvQ77%yk5dA~$ZkbKk*~92U+j zFU?QSD=q1>V8|VlIuGtp(f91N3u?oA&97reL>!$lgk9^49WhFMUPa8vZ{=dQe#^Fh z-y|)T_Fxl#`b1{D1vW4gqxVbOw@{LJe;7K#`$g^F569n^WP5D(n@|eQ`PwpJg%!ExgQ3u{!m^g~#_yJRYkWF=N8Kez(Y_I~;6;Jl=P7_`vK_ zzhX@uqvwGkOqw#Wtc3sbhrMIxjpCnn3d5P9_8Tx|Y#lpy5Yb;)QS$F2wht?c8 zx69(Y-EtR1_;N9Ze`(x`FBW~Uq<9-M!H%=qJh8at=Jrpt+>a+9pQ0Dh1{=u#raj@- z+i1ajiGw5M<=ZkX zmdpW7PA~940$!$sTSEXyu^`iUYkVoBGEFoS+AF9mTcVU{82|Ig;-6m?5I2FxpatC! zO(4qT4F3^%@_%B6|9PdexlhBPMeDcB+Bg2}f{jn!$LEf%A78g~+yJ>R?yVPD;Ol=f z{|NP-K}!ygpKxeE&$Wkc`Z@n~Y{ay=OTT>>d#6Q<(K&><1<3&v2Z*~qBfhG%Gsnc5 z4b%4i8L@LY|M`8|`^Uwa%KzmF?0s0Ykk`Hi8iDA64TAs)+6c9OpY}u>!3 z>2}$k8_5i$gq)#z7%&Ve^-a*yTgAHTB>{wyfDSbG5B)|`0TU7c;FWZVfO%eGH?Z{O zv-|JvbC|!*FE5`qVh^+0Stz&T{ORnFm0wOPn}6%P?MO65xKaL`>C?6&Gw3sZDreP9 zxzEj=*egk!ca19HwdP0Ygp0TgvCEWvffFuvnPtZJp#A%;C;Y!XfnDw`=qN!2S_`y` zS`RZIT++GH7(V#9=HnM*7%xuvVri{*Ir7|wM| zu5`QKqF4|oZ3!rdlUCX-@lWHViREgc()r&PNm} zS&KaTM)pOh)R3Cq%KMFDkZAcO|Arr5*?l~(F-v^+j3o~(TbA+2JrAwDZ(U+OG-H~N zQJV3iHscN&-D1`80c|#jCvs`VY>?0*LHpjg1Sak{!$~}W>k+4O5Q=fO<*Ql?+Y>D` z#&y~DEf`4))mmtT@t|D`+($XtS__hi4ONy3o?nl8~@PG6=s*w<-h#X`gt3m#O z2EG`<#6nin6fQhL9Am85N8BRx1W9kiQ?laJbX^;e8uw^zXv(wRMp>c_P!sHBXd&Fb zg*6zp7zG>54rnc8$5)Orcy6lw8M zU|xnLVlDE;{xwK*L<@4T%_xiy8+{l>e_BPkt8!YbqOJ+TL-7b+7jcM&ZlG+!W*Z&t z5OFAo%}h%2dtn$VC`^WvtAA4fKG%jOuQSDBbRtvGjWVdMVRk|gftVpQM3PK&^+FiM zaqYl0gOEEB@s5CZ1b2|PHAJ3Q5&7W$zt0^WhsOXPE8YPd{Z3Jn;m7WsGBb z(um&5=(-Jvzzh8w_RF-LrJDy>zumOy+iUYE_?Lgs3B6ovfld~+Kr4ss!#tG! zi8gpO<-2Qbfa<$3T=`g`_MQ!M1Dd79WOLb)Q-Uy=1*{&A zN%02p$?PrO&dGcpvG8SrQN zv$EYOxX565X=pOaNttfhEvtb{z%i1UU7U3?=TVGBe0=c{l0gVqn)=};%WOP48)~B# z*}rYuHn!&TzgrE#s>g19`5nG^&7`q>sk)v{b75p_(Wv_Wc{R3DHeTBC5?@67mJRV{ zhOh_;+ZG$vGFPLC_-ShSHJ1F}Mv~!#+>D^zYnUF+n>|hw;KH!N(OsvtF{tHMt&KQW zXhBlA{F2}bS{s81Zid=0#oH)H8{>iO4X>7W|+A|6yc9r_ju`QPXMAdK@e*XghQ4B4iX9vFwol60!MOq60Bt z66(pss%18)v#CX1Y1j$66fHu>DpBT%{#SsjY(|Dd9{d!fdkvD8(CdV6pxhu%1i8s@ zB3f+P2-0<)&~guEltes%EU)wg|4^HA>pg|@hzwxNq9e5}casi_KG)!NWH#XSM*VdF zs$otzV}@GH$&EOGREq>#3u1pB3vnIejzh1)%LSJR~Pr%P<_YW!+zoH zC!{s(B%wuUZM3;lK*R7G(`}6Z6toS`!%zEU4boRypK+VMuKCh!Onu@u#&w1sQ{&u* zVbuACgOJFEGCCiCa{T}gf~JB3w<1;Q9?g*54hL{@{mIVcv~;h{8E^qA4mS+}km&hH zI+ljMJ>rB2-)J0;q^do3h1-W6xckPu;T203m}8{`V!_^*dzf8p67;vA4?rc3apP3u z(T`(Wkv{+4XGhtptGz!WZ6fYPUx_=VUo@*PM#S0N}DnU4no=O`CVk>l~T|5@fotI~-Z9bUu zvu^wt{{<%0yU))umA>%d9pnw{{Iyq?uU@(0p@y8rNQ&No+Kjg%``4nQASwOdKYRN9 zV);riRoF7VG_6!u3VozRnjfuBHx(79cx1cRo0EfD79NwQV`;KCP~>fBDk^eFj)HpR zD9Lsp8AWQFtS%`4YpJSc)i$YZtfgXd$OUShBrK-7kv`5~;&xKxSjMMH!LaSDqiv#z zBAR`4>sK2eyB1Hp`gqF||Gvb`x?Obq(QB_Yh$O70LCRL$GP-tcJQHih3jXyK%_Lfy zD-Y6=vNk`fTSURRba@oukm4rVt5ItF_9ZT&{9VwkS5u}E=nwxV?x5~*zSXuz@U0$Nj|uPFIP~~QYmcnq1<@mrHZ>2pKqnF0wu?UI z$3+XQQ(TKc_LAxmEsWB}j2{@YW>5p&U)KVpaM%UuiO%sBMpOP%YYS}PZ$%5`i7`N$ z0YVC9hcO6CGS&$#FM+IryeYhnF2(Cp#Ov4h*dRHy9y`Q)yy?0g8(tPYCj12zxCb;D z2T~B-^h2n>N~|*Sp3vWD?Nt}OT7kQDjaVT(i*w!3@^7uTqYbStmA+5kP3^-D_{|Gw{5<7Vf z64B`*qX!3^E>vQ!_ykr1zK7lHaSeXuop<=6Gs-lCAOVF1ZmAbz7vwPO2X0SUT@N9v zD-+0rWo}EdFFoC2PjLpENtOWoVOiPEpf89VMky`LW=G0-vK1sEA!!xDW{C2KV$Tz{X{`m) zDYO;_NxQWc5_i04LEIx+3xl*fJ~>XOS_^cKXe~5KJO5J);vUgjXoTvHlhD2eGf5Fz z3qz#yXn`!7+92p2(dI#(Dy@wnFtO1SS|juXjbpi>NUfFOh$qroX^kgAD+Y%+bJPmm zMhI&X?G%XVh<0Gj1455B8eyA&216sjc|_iwHUfHGv5MEpY*Hrry+O1&5NIyqq!-2a z0JaTNspxgA{sc}Btw7@B;m@|-TX2isS{nhqjq5DCu;xLSMGFZ_i`D}9h`|HFWoJkw z`s_8c1?m=wmYc z$WFu~I1oGOGP{j-I2E;oZVK0l-}P`t;NpuzW>9+fh+jSZ;@t!D>N<8WQ$PCQuvPnaq)fpDOBb}Gq$aV!TtWfrA7F1ARoA1Yeep=a5|EkED)`mU!MhE!K}Li}1? z^OTeCI329SvtF6~%B0A-m%DJD(t8kg9>GlbcE+>^F^d!*-wA6rFIwd_q?&_Sxk#Wb zE)GhOh*b#&%|P%`E0E<^9(HBA3OYtpO^r>dsRoEq9Xp!K6oXlyE)fTN6{)?Y#S%(! zd|3WAd}{4dPe_EKPg+`VHNnpSZU7yXqMrZ&B78s!a&Hl7uK=H%f>nX1;nlrv0l3}r zmG8VZc8L#ZZ2lTYDQs~g%3R396HL2L?ga>_e&=-RWqXSUhgGg;}^w-|=p>S$@NUcS8lf9N)ZnOj!2E>| ztXrTjA}l7~6UP#q;(m=&$eR2kC+zwnEDye?u~+qEjF9n??oN?oed(%z4B;7jt?H!!*1@7*wnczG5y;z~)YvoD~|nhha?|ON2$#b4m~6 z8CW}ll)(TTca)rP0?nqhg3g0xwQC!>+K!rgJbwGq_3M`|-uhCUQVs9SduZ)~g%3P9 zU#CG>RIVZ_8+JwHpJYVsh_k?L>-HqcCJ~RV^&zCHARPLM6sD>Qqwz{(ZKvVm?$|nH z;<>?HUhfmQkhb#He#?8;LtJLkevJI8u>`s%eB3^-2~cXmWEa>u=3?_<{%^;jr1dp@ zgVr>sBk-V1VY*B*Q97avb)%>y5i%`!2uF8y7qtEZ45P!_7wER_#I)$W2hViO6^Gy8KShlc;%}+kF zo~iWP!qm%mAojn{_IiK*uWruh^TZ&3@gY*M*`uJ7ZpQJ*N%S59%jOIcEqCq2VwwVF_`R4G*y zCDnyZetQDpY|{$qV+J@2*u5zn=^T%>Z~cv(&IQm}`JH?DuAlWAJ-Xk|KEsBI4P>=kF z{|};|_J8Un{9isiUa-cs`A_C7cRE`wn$&}Fgm|)8I{VWnjmCH%^rSjpJlTPKpVzn9 z_DN*t%@(6BU()tDIi(yWKy;sqHcI1J(PDSDvVDv8ayw8<+V*YSOD(d+E84cma?5iO zRi1e67tmma84t>N>^{-n$QH6t+n)z!pDxsr?1vBGqc)PC9DkEm4(x8M9*jCT7i71c z4O^*!WGX6JWHcFMflE!mf^iQ?T*E@{{!zXFam>fAt;Ii~y%5@4Z8#3`q%UC_e6;h-LoO)0MCX#C(@r$OGB(Ft@%S(9y@rAR{^dviDD$M zCRt?QHVe6{O@c3uk}y!Q5QHirMwx)OS<5b>$i@ZU_jPZHVkqU@7HR5 z5<)Th#HFJBEo{6-lA^J$L$L037z5QTut_!1Y(>W1VKpKx&z>Z3kR_{X1=On5qnZ!` z`V(;WcB@HsQWShKXxFC{xtR}Bb~TSx&NQ2qP5cC4yH7N~$&a$$G!kK7G@QoBU>(#b z%+P?5z@Qg(tH}Q`NM=M4H#Q|upW{@f+3C;)J`D{(tenjksQc6f*Jv@dIZ`AmS|&Y; zkq=b`Ix_Tu{?V{(#pDzPfPVm;hYdlNlL$nDrpA&aM7ly`)@=x6NzlYueUiF(OSXST zQ$*YlV_hmj?t0|A4N<=1`?oi;UA*u5*=!@A8{wry^@S5wzJgaI@uL_S#v?2!M#!Bs zQhXSOh>=1o!yYt%OT2HO3Jp1+`ytVS{8SmjdI|uFGBZs+6GCB&oJB*L?9QCrJE9ryu|H-)=Wb6UokFHL}C^9s7B;7u)8DP>R%i*)duT$0OkD=HGHlOgh7 z!uVGqpJU52UScVaZRQ`Jvh!8GxA^4^KV#m*5w_fZ*IoB4cJWogMRzV;<};i+_`uaC zcl~((M<1>J;n}BSE1N&M^Pc%D?_9EG3C)qz5p6fB#cs@l>_~N>2^k^V0#rUJ3FX_2 zzMwIfp5a2J$Ht~K8LGX*q#@^OX?L_2?WRP!hVcB62@`ukW5y3$z63*tQyo^9@Kq6h z1gQwC=dN$-j-V?(1n z@l4zvP^&-FY7ZC%Ye1hx+L{ffBsT>}eVzIgv0ypNk$T8(yL4@g8H zi;P3@#J&0xhqWgXJ_1-=a63^S+U+!=1>Qz#BM|RpRm<1vm*W05|8+TkhMuj;bVx_&Y-(tPFmf z|FO}M-0W0iVIia{YbqjOvr*ElLy0Hd6v>U`);2{VU|5L8OG4UgZ4;KQHQ-UN9oA-6 zLMs>Qxn^o?Q$9mP!c)XMW&9@)v$bLpNMDtYUSTPl?tA68{ObFYc6COSUNMtK4$fTA zanhVwH+9SFTR*~>^`|47_XNx-FaPq~wNPs8AI8pq{efSYIV)Bg$hzsK!4p_`d}AZ5 zD8f!fIjA0Z_R?|H;l=|)hJ(-PGa3wDH!3uE9R??Z6pv&_aemsF8R#Todsqn2Cj{@D zfE1GDb9_qY5DD?t-SV&Is6i>HRxMC zfhgk?$UIHa4pO?Do&{t$Sx!xck15#`$&=DOsp+W%^_gVN@#ny>6EIi-G1L~3LM*Hh zb9D-$6Hg--QO6jnFnweTgAN`308Tt2PID_=$UUJLbW+6F(eu~-!OUMh^6mpm2mS8( zz5E^iO^p9RzOZxPO=BAdk5g7X^v<^33-~89dSyp%ox)>>zUHwje`2HfxyKi!{NmQp z)8^oCNa94Q6pcSQT48kilBIAsIXTmviF!Es1z90~p4E&XhJj7?y!1RsOL=*Yv@}HB zr@0&eOmgUn6uR#yj*W`hv~wZ3VcZdW;KyAdV(0~6nO0tl(11FlB92x!gC?icZyr0f z^vu~;X8+|r{&#+5(_ItiF!{SVC+?iHedCs?i{w+>6Uo163_sT~v}^ygM_ksFd&g~l zGPj&x=|8Z9P@G5cO=<+b^DM|GnaLhc2xU}(o-A3iLl}OxKL;?R$m{}cDjfll900@j!aMJ_F@pqJ!{IC4qv-do@WgVZ} zYjocDX{)yOWADAoHoqBQIiLQWFZ#pCp?O)GmOp*C|F+z$+?>>`SvxUOEyJ2n2Fs%< z1TiRi&0f^6A`D+-RujUYpM2IDMrW&MP7IF4gNNGqf0bct+W{=X208D|HVBK?Dj+ow z9iKK9Lw@ssmLbChoUWkDh>E(%c?-A(GyxUOV(|_@w37lmsM3C$Tcs+{?e!8dR9WEP zqDC5}NT{a)Nq!M~_yLk{vw$ERi5(v^QsF!0VdF;)HL!7};ffsr4~yB)*c$dY$_3xj zeB1G3M^CD0ue|o!D_9@F?Q!~(kb&%AP-h&@B&P*SW6{T??-))E@mn3+snRXm7gbH{ zzIy+kUV~ZE?=eF4%S|Zq=B?|6)ccJuKLnY18q8t`@1knQGlQ?!Brei zOLN0(4BReYUC~7l$f76@o1s5&cEN7r-g)?r+Q7kSXBqUak$f40{Sul!u&;>3y`=2x zXnpzlbT2?=`P7jC&-Qa#JWLKfbq&8aM_$pa;Qmu z9e|BA1sG_F>hTT4jzZ7G9X;-li?HxFo(|frBm1*8Xa3F)V;NWW@Bbv53J22O*xz|G ztz7(^mB7nhnw;*kfERm{2-VRAyJ$Kr5goINiaIKRlt4-?h^nI_lH*QtB!P2?gGYWh zbgq}J)XyIzGEE4=cYSoib_CooN?|q`anHaNmrbk!ZaE=+27)N+OVb5!dqFDIGqC*o;k|)JoLM6=8mt7SnOBLEQf#i!hoLq<1x2% z>)y#9{YIS94xLgv{sHttr{x&@qejYgz^sFix$RinWXPi-kINcJas(WzOZB;YDXD&h zECQm`<8=5?_jE4_nic2-nv1a#*qdPpr-pesqjM^LHT>CMHuI(5 zykRK0TF$b(F8;6V!WUjUS*%rhBi7Zn&9NVgE0v8VYD>G#R-TwsahCcpCvE z>2%rB6~r#a&oQyQxE4l35ZL58L@9}w0Z$}{&@4za?wqGy`09@hk5r@vaE})-+b?2k zWAE(Bnpiw?z#zF2=`3&MW^JFv|EZ=yT)E*9{@t>xJd$_sqd$KzP9cRDS2hrW14yw& zZC^GrlGm=ewau#FusVIqfDl^uQiEpjA|&x)f086`$Fr z*wQmBDMk=0ls$kIN(s)FP$mSGg6kQO6of(IY7pv?Fa?NP0Td}ej@o>0v4L!YT*JRO z^dJi0ZoO&LL3eI>V8t9CsEu`F1^mLjpKrOeRL+@q$M@0kL;7vfXzMHGD#qo(sBp)c zn1{h?;ZOh`;cz)>n_Nx{kay$EPuFq8qG|jFToBu)A>2W&A!3sEcJ4HI{@uTM`#JvY zarjp1d9Ti0i}|IRm)~ONh=izLAv2?2pM)wRM!3fnj~_%0eBahZNRTgR2D5LiAktX@ z%lEq^c_#pB|H;-29)9!4L2O-7Hvh=Q6y}w0jjf(P;j#S}S?>0K+|6G@jbnjZYn-F5 z$NfWy$Pu#x;dG&t6flNVH5GMDb0eM%T+kj@$iXo2WPmdY5l_>aUQ3X$;9VN^&|T!t zMXr{o3ek~tU5nfys>@|?>uw`3V(iXW{Eu^PXW?EAw@murlkZs;3ZVS;VqLGY$n?c9 z693K13V(Qp6>i=?>Z`@`R;02mpMT6hMis9g`0rDBx>|eJ-Tg-L3Fe(xxt3G#?grHr zQie1u+6CygFmM8`I3*2|CTcbq(lC-NpWhFBQE$MXt{Q;r0Xu>fmwURwDdAKS1TLu+ znjk^~Hw7cK`pR_ntUJoIzld)Hf)a*2HJb28@Q*G~ ziU*WJ0g$;G0R`Rah;`G)vfHZ)_(_yHcqoR7DpQvkJ=ffhd)EW9D)-m?>I(i({;rGX zvJX6Ru^f#ZT5-EY{U_*lGI;S|n+}>7zU8%sX z^nk@C6&9&Nk1xe1uzgKVQ;IVsE!_v>pwE{Cm~)pCHW4KWPF6%_>ZQHJO$ni(HQr8$ zCvNx$NDnn=IIsXhC8=Ed^usFR_q){ft7>}po46DiU<(kXvkXDaS^s9LFP)WTPF*(} zRfR>(q!-Q~U&{MpMTLc${E6%)nkyojwKy`S#SLH{WO1wkdP^E1fUEWt*(FR)RU@A+csnitj8fG9tH=Y2)x{C8#fD91JZA{+B!n)q$$-S%vy@kHlztK?V33uZX#*7gRKIOQKllqI-0Ks24JNA z14sooDa27x^6S0epxT++=Z>uHp4Yjm2AAKkl)W`W%`y@^>62OAbGHp;SM^?Fgd7MX|+#gUq3 zWUx`Ah$viVFjafJG%G6SOYVsZjT!4`E!VL#P4`MrUt;|F@Ri3=OOuK%&Snq&WZbRQ z7q#)SG8(OjSraG5Bh^O3R=eAdtHXeRPPfVJ_1R(5w%ZM68=Q-%{it}fx{uoJ|C58F zofCHb`9P`71J@r7zDTyWJr}WyL^D`9!!~g)ka_{!K7E7ccU~!-foL(AP2H5!3!AkC<#EeuMFv0qc+2ve0ck$XU-vfguMn zpG*!1_L@l&VGDUh4N?^POoQu6F(O`3_ccIqA{vcbx@h5Gb4dsX+VVk_qvM4?WW_j< zuV~)OS1et%Cq+5)Mr;pnE<8-j$-61G59R)B(6xt^Qa*w&*GEcOcEZ;N8RrVF0OIFv zX=1d*0whKS2)b^Y)daXME6P(b@u7eOR%v^b!oLl*^*Y6w6B#{7cpU}kP60AO5l5Q@d%reM&TtBRG@ zSy)^pZ4V28k&1P$5H=436eQsn$p$L}pea-(6n?}{`~n$Ffs>?MRbS$}Uwdm4|Kccr z`i~=-Y38pU=KJ?sYZY_+{u>rnC-IBbX7_=|?tOjcU^b$-vUb=e77cdp zeA`s!8d3WO@dunqBO#7C;YIg3j0B8kF+0sJx0-~^23WTUQ5_|i<0pxRieX~=eF{RV zu%?~8VHVoXCb`Vm?9ccPk2!Xbr=VcngH!msstOrZBhyfQanC_(MtZWzk<(`j4q4yfPhIq7vKu1Z>eK-5 zomw}jA^rYC48i=bJU^Ufta}|X!v$gn>UADFaDU@U%)ka*Ampk^W*O8V8)U)$QJn`D zfX@FlZ4SeY+at6g3yRg4SjfRQ1#m_=&)t6O+>Dz5TUj4qjO!M1<9B z7JFE`(&$GQ|2~V!pJHvw;DOeraJ_`@Z%tEiK(lph&}6jDQfdD25)_sA_b%U>^4QEfAD& zlLGP;k@WxTO&Xtf;wB|YNf(j~XORu_J}>4^$lrD&;STrcXJ1sX%U@h0DILNQpFxt5 zA~@ekjKzvQrh7db76JloR=p6~U{Up$+(ViG(B{Ln4kpF+3!cRMOwNGOM#nAk%GY_ zR5roo<~2b%F~QHDa9L7(Da4$1P6VM-Q86OK*H%C+fklh%GhAb^9KnJw7uLNsY{C7X zECFoQY`%r>oxtR53gPRw9f9KMFT|wl{L;N0j zT5K=&@?#h-^{UToFR&irNL4j@_frf7WEdF!ZP3(Yo6Tws1cA1Xf|Ns>5Y8x}>Md>? zvtpBR^mIKzTUjBD38L31Uq}m@OamX6OGvf4y&BOHr{NfhvW;^V%Og;+bR zJykZASM)q}7u$~u*(Wb)7&vY`aa<9DENswyh3rW3%|+pf3{yo0xJ0q-p%98Kq84Lr z1lj3sz#U=uCbt`L5{NJl28<^7wA(r&Y1leAmd=1Rsf=DFle?!&m)wZgr~)WiPcNjk zmki~??_}}?#`IWs5s)`4BMbT5RYUU)?(ptu?|#Bh!wmQxe38R;Y`)=M{|tH8Ugkgj zz<_N2lBKw)|IAUf6R-UPPN6s0+(srfPw2Fh>aCJjhN{{)qyW6~jnRCBnnQ&{6%4D> zWHn`FD{0;|WVWTHp@3BCz$Tm1>KoWZ$ir<2{Ce`HnF#N-jXJF79(yK;YQ_TRNXlw?i&yQm~P0eoaH@`&_A1BXg-90!ud$ylMDy&YZADu zF8@P8P00U#$p1bod;Nj|Zey?Cwpket7!MS2RarD*kRS^J8(^3jByw3q#tU z#CGzPh>aQr?Qa#nM&b9BY^Pi&M`G{e>vC+LToXGczJ|#p^Veb2rRqw=AC8H3$W3)C zio<~-i>cZERDWK6T82AY4hC$70Zq2HphO8C3Cd|Fli+U>`$^0f z(tQ_5_XOlXT7V1ax*F4j10W30iGz!#ZrQkf&eD@}|HYI!6K}sa_U7^vbC3OH!i*d5 z+$^6e=rFK9GneN+xp~~`WUK3exqMG{DJve+sjN!@CkcSgLOs^oApzwa%AlDgp^jbqSjkTS@P22a4_P;3mK_K<>-Q)C#u?SUkem$vJa zO+i`-5f8tJq(LF%A+r$SmihT~>_r*zDj+Qw$M7B5LpSm77ghHP@Evk+Ov)Imu~+_V z1XVPygd44v%{X*vU^5s3|Dl0DA1!_VKA;l|T2Sfi*(6jBWflu9yuk`A08z1uSrwbp zNL*0EK2Kbjf|JL25Ah#3f*h<1TWG6l}jXe%BI6!1UH_Y{3PEdt<1aFDxN`p~G zI2S6^t8mH0VJ2GpYVAiog7)91_OESH>IJ7G3WIkNwG_cmh6{ax`XWq2qXgv+b3_E4 zxJO?g5o26nk$1`fq-0as}jJ^gAg154VVvyhw*X#3XGPIAc*jJR7vc_ z767Nb_qATDCQn?WbXz%T@(Q`~d;UKua5{aN$%?-OxJ=l~p5aZY{M~OCJt52a>JAjm zQ)B1lpJ5#l+fR2S=7xM@q7B?2T+jyeEGXTGTT_td1&ze4I$>!O7X}N{QPFgg_#Cj7 z?N$;)uP|`F=h{WYVax=P(8Zw6rbTUrybDi1cIZ9yXJZKWbiBT1#G9)X-gPi$Lo|V(@HGnj}u#aXW>|n))l2O$VByq1sFpT z^qPUu0)y8pNeO5z>_utj}~&($^q$kXr}|= zCS;!y>2f6Gz!&&4`K!q5|6YKU{H47cd-QscP7I$m;IX?-9As0gJD<~}FymB=3Cbqq zFhtEeVbd|dTf;ESV6p)tNDM0p2~kOq!IJz5ZcGHwc1Ykt8ljQ!t6Tbw_$4lY8K=?} zaBX*l&V*tH*NWQcPF1y07uthg7tN3)sBWw9A72Ct7f zF(x?tu~Z1gvN|oUflWk>v`Rl64w0mAIJ6yx?D&5U05k)ymcmuSU+5prg);$Ulj2Q5 zbv7W30G?L08g14FXfsj(nsRI5a83D(W6{Qi3LX7Tmm8{pTSaj~D9S*ALZpYW6AKRy zeR;#Jiy2?eR;klRbl+4nXVTwh#8@`}i!Y~`MaEAa@%@-7Ia$pmrQk7N^ZyZkbzmYJ zKf)-z;C92KB`BY3Ohs7*ORC^?E{HuYm)%6%E(;)-3QjMU%&$;NdOTJ|Up38-qtTYW zk#wS=1LWl9ivl|C3bJwr+SS`NegtNB?a%yj_;K3Xt$8f?!Hyr+#OnGt4(r=*_>ev* zx(mq5ul^$Bk!gSU@Iij%;MR>=*)NK^H?bJFMb12lxQ#V#z_s9;hQZ z5cTkqa0Qw{e`cqR2=M=+i^1Zkg&Wct2`dyqREbqbl=oy5?V8GzFXarrbium%eskva z9?14}+P`q$%ivCH+3e2U{?;>oPi_-vv~^%4K#{EO$1&RFW&BfA8u zm<~2})BS`srpbjc`ygwYofb1)j0v}u3h5RPgVK_vx@fK|Xm+5Kxq@<#0iWC9ZfLUD z91egL*^o!=l6*NnZz$@K&oW*=KJW20 zgU6fL0>0ifb?mky+kGq#nfYN>I)Y#6H)YKCW5fNjOU`G~V`?Ql`O`?ma26DqOKIA`P)B_?&f zJS!quh@-1K!8KoRFW>GvEtsf$j#%jRvM&5-8;PZAJk>}wcq!+5e6&nTPIj5iUZ>4w z_X3|kE!~OGWv3IRTrnrG6U+$|;7)Sd{pMtxJAE$V+849Hm8_M?0qxSK5S7Ga5-eBe z8<3239b8@C%6qR8$GFPYv>m=Cp^~&JZUXEgKInX5M?M$3O8Uz@L8tG6PRU;hGYwIy zPtOR@WJ1z#G}KqQOTKttLubK>g&d_eV;yW#XXrPuFQ9&onVIcLHfYXH6xC@jbR_Jo zG{5VF4mrr@;@Ss_51+^PXhO%eO?(o1AwR$&N;tv?UuhX>CbNF*2jsB7?1~vW9fmt}VKK>67pZu$xnT4fjgEk@cVIwqeZ{B}Fn~?gTW{Oz91X}dP7Qvki%7<(6h%rm8LPU<@WH6m`JGLRFEF@?e%3Jm(~7RUj%yoHK9> z2oUtCs@JZlX8Ph~JI9jE*r&{9?*lOnw)+=Ul+rLmnv`l13B2BXggVJe*g0ho3-rlS zW(U}sJ*YJQ4VFfV;D5i=|Cgz%$&8ABQq60`v&E?n%BGOV%Pu&_kK|wU%`_Yg@JCLt z9?Xh;=*BO}5-Y|j1p~Qm9IzRfLGx|L!QiUSQ>xg~%)b1Kp_813gZz7b;s9F_0H4Af zl=EU76bGIJ-wQNzr$aI+NLR1X)71sf!AfWo3TZ#&kUp{Iy+4^@>r7F52|av%eGd+& zO--UvR#5d+T@XSK+O$L0&0ZPdm@vHkG6eWTM`<~T*J3>s&Wf>{PGtVuRc5gR-V}iz zSf0{yEl)o_1!}nq_C^26zIEI*n17y8Z9^aWZ>%`TR~>wSjlMPh6Kjl=4rQ;v3~Y=> zOsW-NDvAYbjqnR3%^B=g6H`s95#W(Fq?>~hi0cp`30^IF*Fp+(#;spRm~sT=j16uB z3>y(;FF#hz4|V6~SaEk&U(ITi1)0rrl#Q7zGn4&--_K2{=;BOI75OM26&#%(Q?~VlJRaB3$n*Xkvzs&knRM7Wo*1wuwEtAJ&@sG0j zTDBw$SpY}&h-oe64`lL>GxyL=)}xLXV(oETAfQ>)hyyO8;;^HtIjtpXl+odcqaBdi z%j$o%efyq$Tc6k~50k&#cjV~lfK^qic6f`0uvck5PD(~y#idVofh zyYmd}9*NYIb;-)=UF=O$QauV(3#t|Ob~zGQh|1m;HelkU1Z<*FocOi%6;KCZ)zF8)LONjK|KWf!|3;sn3|w7-?Z;%}TroDtM^l|L1= z?{bhKuUB>@i-!r<4Jb(v60OUdkTLWcuI-Drwkg+&_E1Yt{yg4Zyn-H;wl|@CUc5at zh9U==2Z zSdHKxV#E}}BhQXG_&f49lw*$P!J*{KN?+6z^id5*D)Q=sT8f(OR>=Y%vx{iO)9uyr z*6>_yu&qd!6$zwExhhi9t(1RzG3<)mICS1}`7&Ew+kL_`epEg)taI726+D?%8M28= zS>kR&be3IqxM@|331F%ouY!0w6wij@GNK7}_8bOy(MB{`jRvZnEz}ed04S8O*7$#n z2xBB;JJb_WBP)gRhkl30u?BwRrK?vfyJHs_=Q2BYmNzr?tnv{*agHCyc&1`JR7pKo zx;l0SglqoxKWi+-UC+J5GV(M!x`x!!(esg_!`$gH%ZR zLdo@uW8WP&cm14-8;C2?SK(q5UO!(u#I*|_pBqjWNBD)R-Zhn{$DCeVg4*lVX+wMC z_iiY?4$6S{*E9p`9zL1B!y}sPKA+3s1|X_C zGb^iTL{pYAGg&erFD(v$O1nVpT=**6*duiIp{1u%>KE}^g2JovR?v1J1ArXuLgi>J zFJ;`@?Uw8=8wZ|v=7D|F&oHp{a_;1R;2)Rp4Qv-Q$)eb*l4*0^?#iT8FX!pu!>|5r z`7&Xi`nar{{QeIu9HB|y@}_a4_hUb+papLQpUjumL>s`l(=ACJ)rRA2j+le#9#15a zovsuV8Z)yp$22L+vesqESy|2j&aA8~Y-?6ZG$}bHc}$ZP)@WZiERAdmn|#iZO+L)O zjh#>9{s7XV9WK`P7$S+D`2pz!za^kkDEZDGGWml5KM!g8GYW6#V_)+tX@|Q|EgM80 z_n5l`br|`RNS@E)S3;LIE}i;vj2|!Ewo;Z?ZmwW`nh*YJ$?fWznN6oN939x{omKqh zs^-6+_6Lejw=hcsKUV=_mI_-g8T%TJVb7hg1#}>-xF|0#9lD|#N(XC5N8uO0Urkp_ zItCGz;4N^aL{m1TD3kC_PRY&EImf%@Z%>$qAU3UHG4?hNedT&XzbNR;fvL2G0ZP;w zjkFdVr#kL18u*QdZW^PPJ0E@eiI)%W`uS1bzhlQSW5zc(?>ur~-<`Kbhu2M?Ghtk# z#-6V2KJexrp8f5sr}qqYihQDT0V}@n)$h;m-+%do*Wcsm9mi)y^0FWJ`qpvZ{_)e()up_Y)&Jp7 zZywN@ymv zLrGyu7$q!Vv~YT}yfTcMUPrpassLi!glPA40W3mr#9(_g9T=x3Owgt#D3B(k&lFn( z8(Y{z1%zg)BX>ea6@SCtow3(0` zhu<`5GY-Y3Z6sb50w!n?b%imXFjK-nUjvu%BHS|U?pzgC*rr$a$jN);zUwWfV=Qa! zqs({0WO+=!EQj{*r<A16!lFV+QMqu1J)nSlvl_hS3M}mtC&JF`J zvRFb|-hNfkXapJ~ZUd8BUi$NIRzL9FmdF3Kruk&qu3@WQ7+N>^{HF4!$2@yScoQ@H z{MRiHKFnjk`u0;!YV6qm{iE@y{`KTgxXDB`M|0Q8gI*Eq(?G&k`2WWpFFo zpvOyg@U%)%L09U9r~8Y#xKXtRPopj_v_-0m3)$i)Pfx(p^@gLO?cVgX+#{wv4K$jc zJYCfCiIMUbFcRe}Z6q=xn3++o`NwrnV~t_eS2qd-m578`w~X9e)TT-T`Q+t$UA7?N zFKpQe60ikT6;U(-Iax|}y^82EAtA&UnGCbUp8)Pamk?rSz+;63tL6Sml;|l;{76hw zH~xnI>G)qRKlt6xZ)=)5dhpinJzt;pPbS5d4P2I&)HkPW;tk4rV7J#^K7Vc>i#!<_ zH?^>km4+hx&&{(xJnu=n<=JsdF!m5^9l%JUzJKplfx&MbVyD=j*y~rf$p`G-OS18j@1pwgwe$<>+F?Cn z_41*vxbxQYA%?!hpYvG5q5N z)6^?l(NYQ@qS9X3K;PL2t-=_Pr*E`MRy(2WsK|E!%noEk%mW0j*^c#z#Jd3Rp@~37 zu4G^^;5aPgPLTt#tLm263bvPb1=7Qivx-$d@do0VNx#59@BHdLr(Qb5WEuda{ggi}!A zKC>{>UWoneP-1jjLOx%fGY=>-mNZo@Npqq{uqxtKdQZf$;_ISyP4b?PBqKma2+AbF z6g%d6EF^7RgD_p9~cvw@!FwSTV6c+$o`qtYsPGOp?O`jM@_W2qKn+G zrf*jNtfKPH@~MeCCT{9ef9%P}U)$Jw;PK`uQ*P)`Qh9uGN%x+`MP0GJEth~RJsUQF zpp+d=vIwr5;z&jepl!lSOm1G9!rD!P+oq|ZFd8<^N*+Qo^e~}PI-Se z`l|SeveK^CIvsrjbsowp%G7s${~GbmI+myQP?tguy9qqu66|{T*^*3k98wRr^g5WD zDnWxqacA0jX{B0Y$cH-yh$#rEMJWqAvzmawhln|N#Z-sG>-C#e)n~WaT)?ceBF6!C zGq({7uHAMgNs%S4T##6;Z8Rj%?hOqSb=E;GZ4-$g0oFBX+7HAM#R*P zN6?%}2d!Z6vnYzUmK}eX9p^nCX7<-ko|G@j7h|DVNWQ>^@csNCMqdKvGaHpt@}&mB z(T&mop##(FtdF?q}pz6!KQUK9B%p49FCRiHF7>>;185aSDLHBdO`6P30|VbJZ8HeS|CQbfc}LjF zpV;%6Q9ZmM$jU$ug>r>r)-mz2qYer6F+FwwZThnmXNYcy)_uoR{)?rB)#Y|5hUuh3 zE_>zWBYTd%@SB4tRB6?M1uO4fIQQ<4|M9O6KDqogNiP|4y^>{k2_AbZ2P;VD8XG+#`giAe)N(%YQ z`CL;$V5)p>-MW|L;@HQ#`t_a?+D*KDl3Xo+3(8NC`U2fV@gygEy=I3)F)OKQUXR5C ztsAmdFzCy)V=c9r6Bmt3d|Gf9C!?#7+Ishvr^`RhDVjOeQOw?WZ?YLHQYKf(T-emYQZ$-nPqu)+ zE6JJ3xe>_X&|f8lQuxyxj!>4A);g>S7=_?4`k9Q6Nw;^AnoG-?-- zFK>D8aI69BCQf}p$Soz%p^%N`SNsvBI8qEKMrVe_Y3W#M^m?kNL)2nYP&zsS3`{oDl?p#|Q8Fl}yx5t(jbsQ4u=+0sH zhf>pv{qDk?beNT7sTBL!EcP=8RhiP19I>IvnJ6$~G&*T79chm2kd%g*h{M&bl=f1e z3T-3Z&SHF;^-@$8uL`%`)FQYvpKaH-k^j14){H3zZ5t2o-gAP7?(V2wjqf54JEz`6 zyZGqtvxj2;gh~*Q>iJ63A;VX=18g{lgoT*}OLIOXj8fQitE6hF1|Gfsh|C)&&6E~O zcS>uSExIP!y_3P|?A4=8vNw*ndG6dvlV;7j`;J?0U3~B2nKSF|ts8Uinl)oaDE45# z!U%Gc`WEC`g7)A8>+V^;d?xImvt}(`Jag2*fiq{0w~rkyVy|f=gXHXB$7_@+F@`8ckKhHOOL|Eh9=wg0>07)ZdRvo}G%Os^aN;o`3HrnS2;@ox_PQ%j zT`mOs7_M_Nt`Moy7ZU%V`BlV!r=JvxL9bWR>-cJG$R=YoF_8!~G0?3DBF3o=dvzOj z*iTXEc!Ckf!Lw-IXRK$X#|&p!>8u~6+m0C=CuYU!nd{oe%)!594)xG1d|W%hT+OAo z-6kJnt|iQMb@y%fFmk-{)S4A5)~s1^*Zq9K8ho&i_RgMLT3p>}_QW&GdX9lbw@sX=`z$ zo?o?2HIHJC@cB314Bjw`A2aR2-Krq=zX*R2Cy{NRM@eud-oxjajp`tn9#$8%iq&cIi8}zMB7|rfxvb=zuyzk=zYg*hVo5dOf%X{sE*^ z_?#1!5OiNF@NOaWfVbF@@pu^-9wkzxG$Yz2*<4&87nGHCtjMg$HRn1rGfQNr+@-3x zV|GVC`DMEi7M<CSC_AsR zij-G`qlpDF5eucosm#w42%wZKUirbFHT-*FpRwM zwwvUS`0sbke{Ta^k!8i3VqdxDj2-(+`DDj*1jhbm=d(BG1+)G-fAX*n#T_zk9{AF+ z^i28A^Bd+odn3P$Fyaqc&Vw7r51&bQ5k3s#4JRP8_l{<};579jGTe%N^Lji!gdPFc z+oQNVss%Y_|8IG21Tk>e62#4vq$;r7q6CvtoP?r(R%@x* zXzZAiBbkFXqZu){W~WaoKpa^ACe&cUokrV0C?xcghLjA+Pb1&>e#A9el!qmI62bVu z#-!skL1q`|HrNkr2wAx`y3LnA{VG=R?Fm!uw-qg4-MPDCQu*%ZeOb}LWmQ48C|FrG zxOb(GWi#7Tn+W#j$Wjz6|KPSIcg$2KmhEZWJilzpl6mv)9apkw?Hqv$ig*=MmO%XM zgbkp$noofk0-8B6mtOC#aZ0#t(FyXHT5|HAnXteb~I4-tH!m+|UE zr5biA7cAMR@duelvH6lwnKV^`efk04(j%nJ zLQgWkC@N1vZ^CUoKxj)Qslm7{u1A^oK#$5Jy{gUogXw+D13AeiK;**DmWe3PLYD(( zX)mlO85ya5zcCdOT~;>Y5pBpPM%gn*6zJC|f)-D|OMOf8e#P0S;HRyef`k@g5?Z<- zNme0P5lsPuE2QzyY{M1g3hv;$`9?OEO<>da=clqIj>1Rp&2M(G{Kp>Iw3)w$jJyqe z1u$#pARTq(iTXQg1FyZ??U9%Gm_Pmb{5zNf;tP!~gAYe0hvwjh;DB=Ck|jGkBN#Mh zU=HD2zg@Cp4%vWHidtMsYAeWD>L32^bAUfgOaiQ3{*apP2e!<_2moDqmH@JCDVCygEWGq;-jy~>NP2B5I?8j>C zN4iuUO$VA1B5~4e9$QAH6(yvc=_=s7ok)m`!^ot*1!@utu1PKA3ZYf^$A<}VKn(+d zjFeV!`rU@5z4~Hsc}q_}^#s3g0ztU1u!p8Bzwv(PnV zU-OD}ilZ#V zM`2sk!NdONr2KJg%bfXJkF&4uOW!d&@Zk2j^`2%zZ@hNDdY*TO&W5i6%IA}z82|VI&L*B!ZLi{p? z5p@mifFy!S+zSCdWB4fBne^Tr3$ijhb)T?e{T9Qi#@m9WE6v4`j2yG??X26;W-SlJ zF1IX)s$~8RijkJ0$OcQ4xX5d+ojhyyl(W-s;b*AI#lBHE)f53JiwY(Mf?xJ&c}9y( zOVq}~6F^=dOritY6OtZ{m#E4~QMcO!&qX*ctm}O+L0~LL;^@cV$%c9n4GFV5y&n-A zSu1OW-3Dhc?*NCZfRt67p@hrAL05+kg@t9oGE30Xxw5Fpn<{1hf26$$U=-!~KR)lw z?2*|`c4v=l?mN4LkSy68n{b9JK)A0!5CSTf2qID{h!hbK5D_hkiilP%r562Ct5~hK zq9RgCt+murwH{Qf)_TwVwneU7XGq*2dOz5dFu zKTOfYB%(YYv)ttM+_Q?6I z*A9NV1-`sPb{T*8&E|s>roDLUQ^sF+h@m1f>Ck`;^IDf)b=$Tne3) zlL*xgGBz7O|H8QAsR?uDOn6?*{}h4Bs~fA051Wp@`r3QFvcx=N_t3ZBc=afd0Zx$Y z6tS5nA&-d-L9=NNDJ{p7lkN8-|Eb3VgFr?`fdd)a(j-rg$Br@;wvZi(+St9^9HF^r zN-ilnw-3CSqCZJcDY0iEr5g@b*Twxxm&BTm!bn(I?bIrl7zg3mf73nrPFt^K6UF80 zLJrrMey}_pHy$797Z3GcZXgq2`-|TjF!Dm-6@A+eTwHr6705DfZ-4sG*(vaq$EgOY zj|Jern~6+KWvNIk=YpNXj#CPiLadSFc1o+u;X#%oB;WF=DJX{C86pn>{??L^_C~Z= zHbsMyGSLMbc>PF(POrI}5 zgOYIM7eVpLIf$;$QC&8t&7Xn5bvYv=2=5JF*IZ!i4Q6(i7kgbJ@0m|@By0h%6p-_U zB@fv77odtVMqMGhGc|x6PJ@RG|Ugt&eVX zdjrm#P*w=GGW_Apae^R7IAZre3bH!g_-S;O(>J(9M{E?&w@K1;8KEs1uU}WfSv^V7 zVuZAAh1Z5nZU3U-0J(lYQY6xaAP@g*r%iB+ON|?yb0*yP`0jvsk)uWC{^<|o<3Dkn z@&5S}*vVg}%2M`YHabB{Lso=RDb;0jryx!&EzM2=BVMR?#810zlMtxpNJHE{&a|P+ z65*0yrf#wf{%=6KYN88Kp_rtYeiZeB$;N$?UpFq2*NfxwCS!5?ZjpICtd6hKKk^_@ z#*0N*dv$yUZinYLdgP((Lryo+A|Y1F1y6b#g6Y$Mb0PE;^i6fTok*?i);tK}lsSs? zJNgwemtZg*an~qD+UlLZS}9iUk)6h-ErX1g23~J$mgP%MF48ChQ>-+$(mzB~X$Vz> zBw~I^nE`D1v8uYVai|pZ!!D7IL_+Wk)xBzZIz{#RHSDRQhGd#qD>9%&iG@ccxLZ(9ZE;PO|v>u|HVVI8X`7>CQk( z$mhanLLnr=NKZ%btS0O51V}?buMnB4GXV7K?xxm&j+m8nn5GalDVwqD7!<9+5(8o; z;h~t*0O@(sK8ZomZ}3bfVc-kEKYk(*GD$d%&DRYyUK+I3*mTHv$JmBY(0d+VcJiWb zgz5}-V1k+4eG2rFA+r}Y_7%C3nxlJRe@%C}a@CNg6(9|0zQ^Z-Wi}@#l&9wAk{9lz z);vXbg-k{_<&t^|7ctY4+_~K}>4TwI75H#O85DUkQj1c>7z_anf$3`yQtZ{LQDe9~r0Q4~!S~s7rSm59Qpj&bV7tU*j-_ zil?@qkm_84iXdZmo<5e4EAogefNgbCR-;4bF+}=LJ6cfvl5bJ@*v67x5k)cM?8Z=M~fx# z8~+nCo{Ny2*M&F}F|mby=ROegiVLdt8<%t=W-x3VCh0?-l(&?X#+qks2SL-k);rdJ zo2LDzS`*Es4+gF16T+g#vdb7NC}PF{fsWb4_WZ$W{>>&*dubw?J65h^Og za;vC7&KEg3x%s*IV_R|9s*P*SLL9c7C1-_lJsBR|?FccsO&=snCVP_nKck~3_2KVm z3aLU&;MizR}JX@|2Fvm9Za znt6Wj+}i5a%IkJfiaR8AesArIQ!t1efyHx?plAo?8Yg= zzHrXcEe_fHtJDc&dOxtj%6xa^1Djf0QJkw~_>B*WRQ1q3FCS9nkrPHYCllc{4DFNiEl=y$&oy$yh+)Gt!Z_&b+uz!>*_|Qj~r>?w{e(rv^RoWM#`Mc2I=uYBEhI>nAr94KE#)v-~p3 zCUV;NeCfnd114-5wX8v(85=%l&hYm?{qRp0UxDl*YgR58(~R6B6*I~g4*PQT)Fn6A zR`?I3)%PyhbfJ}PBCR@~UGQ*MIx>(7!C*+!^%+UDz7AWzqmDaozo!(gB4|q^Y62YHHyy^F#N+dG$ zr65Zej7;u{Nh1^UYqxko;1YQ2v@A)Yz+dPSNS-U(zBYCm_p(80sh9-J82{XOZ2sc*?eoq*f1bHVwY`Hg#SA)8bip$`H9g&l2%fA|w>#5~S=}cgXBPH% zrXnyM?kyoF8D}A9ImRNJ)>KsT2E2qRTs0atM8bn=8-md8Q6o(}@rJiTu}Ae;z2@9( zI|A8zEiiQCS!Difm-?M(==YmJV(X9hjInmkD7>>CK9zNi**G26kU|#@%Yht4mb3NH z$X4A;wNXh)lk0qPNo~!*>=jDc2ZPl$)Duh7podB|0uUyO+nzyao0{TV-gm~Txn=W; zd-X1>^kesXfi0u3)LS!9wEgh9em;-!URs|T;z|5xdxz{K@>S@bL;1e#I4mg?31}9B zO+*56{Ia~>dS(N@M$c3xqXick0oM@No5NgF&LPdR&t)D*){vCr7%%722K&!av8u<+ zwy0yheU!Z#tCk4-oGa79VP|G$0S>7GMMX+(fh6U+;Ot#e6i$QHB%mX1FE=~WnMs~; zPBNh!rL_w7N?AvF)dKXGKHR1kM^VFQpK5P4)s2Ne(#HBJYBMMLD{pAkVlPcOIF4Q zm53|FXwf8Ag$Gtw4-6X{k^lZzW9QE8b!?XyF>c|)@fc}K#}-scc^9kca%p;Fc}Y+y z=xjzj|@XdAE%71uNj;2p|G93 zb56>b23*gb>l{;GJH|CfZurXhQ$gL3p|vHV{G-2%(t^6ip*1DO8>fzss2eh@X4J0_ zkHV+b&8GHp-s3c&xtehTzO`{gb!Nk;hKk8!#<+#6WqeCZc<9i~TY3e=}Zq^2hz-Lx;_qe%>7ChR^k!qMU}j#7Pqd4s5EgZ)zGkv{_VERJaPfE_m#gy1a@lD;lp9d2Lp9L)Ab~s4{HoGFXBg!{H-0RJx{dXkNd5 z@pvgV{SN4K?E1=Ksc)=m3{{neN{0`tuP^MCR@ti(DNfyPS8A#)1-t*oKrc0~a9~Yg z4N5Q;b~6!Y{W%sp9E))bM8XD!#j15y)?>*8mB0qaAT064*1y{S&5CSM!(KYMscK^t z|C^``|DT!KF?`+r1^93Oy7nRe8xIpk@gHjO9tTGI0Hck5xSiz$b3D1ddzTd!=H=z0 z?r{>mj#5N=g)8B{UqMgg2B25{0SmFE0Z(r~Po~ut9(igYodNxsoL$Ww4>2)*fJFLd zK9X1objRqww@TYGyWmdT)5Ao4@mO*BhBS8<6SeJl0#|3==`>akT_mzm=j+aBTQ_4h zRyLSxDep1%`^f7CV?1hO!nHOl+odB1sH&#J)!WZy{H(YqlUJ;LOQG(7Wz;O20Fx*S z6&*Lmk&%5xcDC_|ao5kpkQ1N$VfCbYW^daghOBsbHnM8{Q5IK;i{BM99$RP}4%eJI zV$7@yqc51>DFYd_KKddBgDGBwC8wl^9I41I=M^aZBhqnLhqX-CEI3wQP-BJ?rII!< z`$1+*c^S&Xd?xBd-k}Fqj9fKj&Z5Kn_n-%VND*bikNRhIEyi2ZOCjV`3^dCl<%h8wWf?!~fDt^0D@Ki2xhG?Nm*QzCxj;B;&ja^~ZRf7Yr8je#Qa+rrHn3Z(6%% z_;okFSrsiEJYel_blbB~MmPLuU{ynQR_*6#AN9r$Dw=&6eAN&Y3$rM~iv6_SOhf*w z=&L51;}r-orOkqM-iB2Kow)}QYQ1yLdDAZ(T9Q8`w)Y9!!O07UH#B&h*%>IfzHl?O zzd=1Hf5YvUGOhJ;ebL~PET@;6WZxLYP)vvdi63qZ2o!r z0sM*YHu0ZZY&Tstt0;d+>&kx_bWvE)x>AIew-pu^=eK_U(mC{d=1S$*@;3eqcj))b zl}6t3*?jfA<+F?P=vz$Vb&l1x*FXmkR>! z=UsfKKFQ`?TYF)2x3Bk@s!98%pIoo*9r^N**R~p?(+5V(2KA;AYEUV#0&I(#EIyT-kY{?0{ME;Low6NG!lxbS&(w)dkRGmhWVQ zGSXm+x5^;Ekw9T5;hPVT&#yi(O7I6$d*y}MO1WzKDU&yNs6 z&PmVmH>w`D&F9gBZbx&gJE#>~(+!_HVEuH|6kD3ozcnJ{RYa;sm~qVkQLJR3~LEd4P}50VR5mtZt(PHPzY!Yj$VTo&YAVF5#6!q;icaDekndri-n=VhEyY|)doYTB&|52Ccq7+5zjrYMm{rUZ0jM~0V)xLLi z{#~2pm)74jB6=eXLdcK=uN*qNNkx^fJVZtz3j}fvDu@_@&Y94P6^QKeamg?E{n2_b zapsgzI4qy={ex3@@~1fP3uSNnDY3xVWvuvxvO*q)#1LnVXW&FyZN8IphoAGE$a+if z49duVDss+lUXm=&ufoSYkLsm%th=) ziE4MFV3#B^k%cHP-;2e!H`|$w>QYWb?As=^%4X$^g!!}UDj0SOlTz>wp&yWli_%lz zs};J3jM#`+Ggc_a+Mn9E>!1kUev|Rl<0J2m&AWL0b;hYHTTv?MS>ulKTaC94A2a@R zbHF2p7ytAw(U1?^Y%*%q*KvB3L;VaQu-=C1LR6|a7a`A0t(lo55>2gsk1wboK`Ygf zA`F@HKv#n@O#`H9O1%;`;t5Y9EONNp@JNFtBpt3|9~;}QXkNZ#{>7KpM~v0V3L`Lm z#82BdE-*efPDVw3`46sLwq7?VTkXkD{a1eitaW^2G&oVy1^b6(jd4_cOhFP{q(4Lo z96>Rmu+@gral{OFk#w&erIfMk_6Z;SLo_(~`BJl!wUM~%rlgt*Cvmbsa+{E0^Ak&w zF?FH;fTaHQV(X8dWs=;Y*;x13xho|Zqo~kFXSF1ZW-g!C1*N5pbx6vDgiOet?ngTJ z0QrU>9*^8v1G>+bo(kV%ujKb5fmOf*3Q#K1E^`;$7g*!`mt!#p!bjzafzSzhBK`Xt zqR_a1?{_7DH;z+I-EK+XVHutQ-Gs_d@SuaLLWZz);sjfCN8vuQ!{h#O>;7W=hNlk{ z1oC;ndt^*wDWdX_ffto3kozxHk)1M1=c3j;JW5cY!UmV0MA;hRH*=r~C19#tlaiR+ zlC)t`smF;NPj;5!R%{S+a0UuP0_xQkt!mf!WMc%uC;V%~@1;3xwHc-jZtA>KSAMw^wP$lvjK zV9bZLcN7yQDib(;pc#1A?{t8B9gYB^(tWDeXHRh>X)IzkT?$H1I?1)Hvzz9ec@Fc6 zMP@Qrn|%X^qPyfmfPmh`x4kcZWn{??BmT{8oX}o=NX*zLT$I&b6hAALFX_x|kJ2@^ zO{_KGdzt3;yHT`~lM#i|{eb}R8S)?{(G+-HIlY=!4hB&G4#nRXoe6HU{2kZ`l)xrS zTS6xbLZs=nhoGb&m3CwVLT;H}p?#jYX=uMaNd0Y69&pQ=C#CJ(nAMc#roukIb&D(kuf>lLg? ztlq)23QTfTPB(pq4zuAOv6I!nAuBOK-L0+OEjE4lp}5H^4ltDXa`$d~V8`d}kD=N_ zqC~)UvJpr~J7d29c=TX~DDr5eqfoS6M;!_*4JBQZJsuktBwQ@fLLaT|OqJTDLv#Z@ z;?pT>QqUP+_L&yGjK}5IENs=7*rMu08!c1`&e%cO%H7B;A4aN1AP8Bc(o$_IrcqTz z5(eaCmr%b6nN(dKn=>ddpM&eHJxdZptUb`3WRIZT>3?RjLM6XDVknb07s9a6LW#T+ zy6m8Zmy%Q@4oAvXtjiRXi$kVCpaYc!k=G^VT&nC_iCg&?ig>)sk8J~$jKb7i%f4Ah z;Gf0yxH|o@c>bPiI}Dro zu~%+hY9>liXJz^G{PsM1VUdhwo-8BFR?hg=d?hQ-$3+jV^;0r`cCr^{C%n%wC!AxI z$9BC$2W?~5-Eu&r?$~M=4-el}HG9G3>o;Asath+8mKrP62NhrWZN^(K|JpdY(^~B9 zyf@z{RaczZhVC-g)H;>|YgD75mumA<5?_IWqFHG+gwX29Pp)Tc$X*V9f>DDCLkQC? z`&>&@v*!f65RaF8h;HMxV0zNgLfs3L{v9PN@~4i%s?YeiV^U^$Jv0reJqb-%!`r zUfy?7Yk9dh6hgR7NKNxXe@=v}t+yBpZycOp0qcFi97z{8OqS~6i5wc0*0YwX0B>Mh zWVz77f*ZlVbNJXJ=ZtB#v~iYj3WT;7uD-}OF*IRx_NsoryKTYqhm1FOqe?<_%+I28 zXG~nNX48t=P}T4gM_zr~c(A3ksvt67-n;gbX-;Rzc*B*pEc$<9%sXO@*qY-vj^%vt zo9ExL_dnG3+jmdAwyk;W;L9545N29B9=DBG*TXIrBg_OUv$H)~d3i5HR47GKk*Bhf z^1@cvlvgRGRn4uXrEZ@uqp8)0iha$kFe)e*?tiq@E z-S>jvC?@Zc|cpI4OL z)~|OZc`H~aABc7fW0u64R4z++8E_qxFlFlCwd(!&jrq-JP-&e&^%HYYJQvfkW^*XW zM{QLA?y(d#57^j~z~p&eep;FX%jtaR>^D#nd#bV9)YoPuY`m!onXjqx3cm@{sEp`S zM+)AAN(x9_j?!DuRE{7L)Fh5V*twTX4#_tq6*JXi`3PG1eX}G>`w7y>JU3Y$8xuME z(3l4HclQsOxT1wkv$G0efL8S#q?TCsgz>KN zfiVP?^XkPx6lk>|vq_ScPfc(pRa*hf8tygTMGCQ;WBR#v2SLGlG;!$K}n4NL4a z%>}!Ga48CQEm*tw?3lBm4Y>r4CH(AP!w9tiP?wmSt>5Z>9ImtO%#Fq~%4y_p9SMc8S zkP~OdR0S91ak}ryNk}nGSj#ADx=eNeGeS5KGl}3c+iG(;+wtPD55=~Yw)MYCE@;11 z{j~*LL{_N)^#G7)0-N}OD} zdK;s}IR5Z2p8pM&ci+3bO#IO@&+ndk=qVIP0$yOZ;F`CYq$6-N8gjW1>Z?;-Fx{4w zjU+pvGz9ayQ>d1pF9W$q6`xsPfVC58F^Ctj4LBu#;+lQ8FS57Wwac3ooh8-Xcebe0m%gJR3fES555qzZRSNkJ=@#N%NZpr*eIt z9?*^H7%nJCpd4xk7^)% zE(&oHja+B>8Ks$-x*E<$x1!vn6eyb58c-$d4{#{Qw#nq0 zi*gktH8qh2f0?S9oTN(R2zwF43prH;#je3!gX^~xlp^&d|SY3O>c=-w6Z9DI3 z6p`H0+Gua_J=h{9i$!O3+b@3vR|$2Q@#KNa_qyd4`#pi1Md3@=u3NOA2?rI(JXT?} z8EXga*t_4@+cZHvuzTaCUFH~V+tl^gIdJ92-1MSQ$b+1mO1dk8JojM=X2a?J*w&&H zoT~VI1wzrMBTydjmj1#g@(zB=<@ z+tL=}RNrD{>%)^Tpb=p{AgUF?|7}TQeW552vZChaXM~A*5u#o>sMj0RE6kbDirC;J z1u;?j0>w;3o+GeoCZa(nGW~d{rUOw|3Yz{{G-HINe@jRBgqeg?e))m%S^B@Dl9Ll~mg0!QTjq7S zdKKp6=cEKu#R66*8Iv~UJ>`9-2g@NItM!T z!a{ujDgt#lQMz*?Wz$GjF2NIyBV4KTH`Wtdv81IZ*rAzpm{E)J4hIouiyCFvD5JP3 zLf<5jj)ECExoL=0P0M!RBoUbak;<#HIy(F#d3%+ZH>+{TL+c1@`wUA|I?j0D^wjMf zg^qZj?8pX@`wNkJqw%Ei$*%2dE?9N*&vxxt2)#F7zN7u})Vqw2A2W^_4^@ca75ldT zssFpQ$`Z@L-R|djpGkx|)5P)?jt)u9xMZH?)PVEo1SFf^{|;yss6YZ?%)iC0c8Rz6Sc;r`Wr_BU$= zr;Dn<^y7%nqs**c$Pc2%rSz`-L>e+$J&80C$_Qe48-&q*B$jSA3DOc&5{s4pqMya^ z4DIYD)mAk<42(~ER#+8Yaw_Oqd&=Zc+Xi4Vh||`5pAEYjKT76#5Gvw>InL+v1iXsJ zr@+@Ed9c@G6-CtML%k$3GIfc6(ryW{Fy?dyNKO_ws%K+j1N~q2OE~1x6e@c13oS!3`n@anR?(p$ScX z-?nIiRtcnFTi#`{2x}3Drq&`MO?CTAw6bk!yXse1>ONyMD6SJT%rz~RZ?w_{y|5eL zdZ+>7V&R9U5^V|m&ct2-1#djA;uLptvJ@qo4?1@yL?I$hVkbZ>Q*HGKHBwjZz)s*e zY$;Zm)E|GZO6;LJV)B8fsZ#1PlV_YWStreGtjv%!_)951o6U}M5EwGje4v><4dwV? z{fE;F3zs(=-rW)v8^b|u!uJI|>9Py37{_#;g8J`F=1!Y9)7=PhlS0WhUQY?4l5v`- za-z7cEzV>-e;+s>(~#@%Eo@Y!lkAA z)3X#CmfIG~lcv%IvO=J$rY+0oap^r3701XEA-}uZtXFZSXh)E5XDwz5V=lDcZ*iI@ zHg>D=)%Jn?{l+%AeBsPU>VQep&8a0?!GU_oJ9n%@z0Npj>#Xr@y7O5H0XB)W!9r9h_bh8cx2$8j=D3P^=EK|og z*A};cJ>FW5XHw)+ZX(gfYOYquZAgo8oJf@?qMv4V8LE^w%IxP*?q`m*gb&LZ;~JItbLia$nyfAT0ezBd?eBYU%Cd?-Jzu3K{S;c3tBz1LwJ zkY}pvjo%_q)H}wng$wKbB`qSeB64;mmV%%QW0j~cze98Z^`Ee)UzMc3Ng33>lm9}L zkrv|@Q9qibzPWxxE9Ux9S}ceQDc&uTXoc38SV5u{!7E5S(+1Y#XAJ@14X*ZSDG0dq zW!mx46nOK%1KS5{h2N&g3e-2Ov6h{`)7(#My`-ta+_#V-2k($hLR3FWWvaXyNF3|X zZn4@ZSKcy~z9a0=qtABy{=&~Lyy2#oU$|7c0QzOv7sj3LKR@#JR};k4is~^_#xox|sUy=u$Nzj$twoQaKb`RB&%`G)a3aMxGk#l&cQ z#igrxA3-ObrH&Bj^$^iZjFSvgs{IM6CTl~p?GT>$t@Xrhpn7uO01h77iF);6xBzXtfrEFib9*fbN@XW*9jv|*Qd50r$S&vP|GvFQA=82QL zL}gMdR0l);fq6~>UV4`Fm<&fY^fvhx`n=0qROK9Rq3?ss#HN-Vi7g+a?KTI%V_abqCN&j#{=87Ix7Ds`zP35R&}hs@E7 z1|EG^-hw397x3ucw=i^;xk6PssS#*L%b1J9@*Vihpa3L`p|?ypxg{Kn}EWSTq>b!1Pev8PDzCZNL?hi=1} z2JF(PvQeNb&f!EVYD2=q4(a}pr$05-4|_4(%Y1eZ?AN**NykA}c+==X2a084-AXoL zKJ}nZpX=m^7T5R$eTE;Dc`^f6D69!_FcX2r?E~v*=H&aY!wGIU9nFaQFk|ec!x>{H zTxMqpI+{VPNAP(YuuM7Z8ya&^JPxi-lEdeBVcJ421EkY;BC`RU1Iaj?T;+5#PEc0R zl0xRXf)c^isj8dB5K$Er+u)%2rtz%2$@|eMzj*&Ir)1~p<}>1&`}Tt)NKfwJI>#eH zar6b*yO3xKb5OB_vzc6noR;P)E=FP*M2D4>y0Ry>23o=^aR&4v` z><6LO#?%ie4}9-?U;q7+&t&J>;u#YsorjI>nty#D?|5p&xV~{-gMH?Rz?-a4s-!%g zeNw_o5Sz5@lAs1cg*~ba3HtkZ$1!je&mYx&;I$jIota?{o=Y21BNt; zP3t~5d#G)k(lTq@v{~L^!-q5>z7_@KME%&A8#jvRnd=9RnlK1efB(Aal?z4r+AH#R zuDj{lZFFj@fifRsRa}Nh`99tfn1u^d!{KZko@Lv6muKmrJeUdmKC5ZIKKW2;UzYoVxN{-Eam2wmHFYXh;41LyP~ovGe4Yw2(-ia%tR>W`08kUaCTAhuiD_U zjUEDGZC-ck-ret9)d@%G~1XJ70Bgl1ozD=qpj#x+9JC>aHZ7ThE zGtmh4zH-p0m}!)5)4W=GdU0M}VPS!{prq8}&a~U?HiW;}i~YrU&8?`WQS5h*ZuMIm zolccS8?(e3JHdG-jY@02iy%Q{5el+mllPX*JO5jh*s_sl*wbxOihAH*bFSG?M;1bi z0jnPeRctFFOK=dW2o(ixQfavbX$8e4d3i3l!NRJ8TBFctD91Cg)kSiH^9;*iN$x=j zQvmgxbpzA_BtdTA0%EP82yZrsY1ut)gzsU~cr@QiCz?uE3X#B9f z+R|U|ZF+VI^__BDzQyy&h{j@^LE>y(aRg{G$;#FUe#ro+ok=WhiEnt6?o-y z3;`cT8xDC~S+2CKw47W4rx%2+h%6=BlNIzK2E=EnoO5=LR46nJcdJXMSl5^xHVu%8 zS>RqEw$liiL>sAnpw&xOTlA3jAfG~eWRX9B&#vI?!Y#wAFFQw7Cw|Jp89`uOz$B)Gq5CjfDPu9?JS6|g*bQ%-TVbBOSuDBktMk_0^VkDV z{!CPTEvgOk4{ zLVKiF39{t+CbT-hZMjM=RvEd-wFM)Jl^)7sIC59(Vt8XE$xC})nqqckb_2Ji<3PW- z02kG<68KLR7ICqMcx?$*$NzX%xUSiI>r1cIuf1&7e&fImKV2&9Q-5RJ`=s&F&4*ty z9#-exbGT`$@!5h);z*(W%#O)TwdKbC2^YU~&CZ8>&VE?Y4hBa?Xdf@G<~>g)_B>}n z_pqQW-Pj|kbNRj(_g8`jVevZOU$2-kJd#n^t(w3>wzCSQT*x}trJar)+?&pJR@oNxYzKeS zn3|LQS#5i$XFF_rJ8SS~8K+0GTob{Z4og2y6g z!a2=L@Q#QWBdv!!heKxCkWIkLMsS@i*hD9Lp4lF#J0{f5PtM@p$wh1q=O@ik`jfp| zV>@j1&P;^fX%Bxk*}FBiHfxmSoxNjhb+&V5vYm|XqqKLnb7iufPMe6?pIOQNtW9Fw zH1Q|<^IS~d0eEU3)aV){o-fYwlBsbFCL!k+n2D#PwoMI5b=d4aXx^m91Crx&7uYOcSCOZ zRDka|$~Sw_q9_@eZ_LYhcOZ79f3Tj8oZioFKeoF0`#=3FUs^nQ!5= z;{qB@mv&a!YJ0ZRaSJ4Lcb9fn*%p0^HZ-D_SwhYJtp1MvxLHEY{;ama7TSZxCU%Ke z%yzD@`Ku1J{6hor8+v&I!)O@x}JF9Gqzts-gzL~qsc2?Wo@7WHo z{0!zUvp=iP(I2xN;x4nDD{LQH?bLJ~m-;Mom)Xu0Hlhd3S;;d;#5RB?%w1@Q_5bsx z{wLbtSvj5ON#+@*6I-9r9_fFCdlR)TH=l%aTY?YKJLG?({El;oE~q_}kKTbUy}D4& z?xnWmx#klRc!%EChi$O@zMicNlji>0R!}YDfpfM&JY@C+8tkmuMoIUcU=3mR1W%Z{ zMefD3f0v#>%bBg9g^$fvOq05)p)ek3Ic^174vG?^fu$#j6Qhu7`j~AHm!sy1#r;$# z$NVO9|60Dk6O>ua+Pof^Av}M{_cuaX;MfGp)4WUf_nOaxLszr3;CYsXz1&B^>VdQ< zD#akr2CbIxO@4yt2$@fwWb6dpHZtALx9Ha2Y$Ke&7FU~LxJK9}kHt)! zAR8{xjamWSa5RE8y3h@DpxQrX8;tLF5_F)tJLWg}J~TdBq!krK%7mo>7JY7_`+NfQ zcc$Ac^S(oauc*1En8X*L^phsp9rA^jKVzEPqe|aFt>s4x0r1t zw7Jy=#%Y~lO)ljYOa+G)T8xdh1{$UG8ubo21;JI4eENOV>)8%YO@RTydrW-9b#|cjnL>u0JUQGdQwD+oytc3Y4)pRFplCS#mM03Kmtsh(uX2| zLHuQ$JbKaM%g%qbZMC>*bz9qvxX2y&$m8mXrn&QnDAdV(KSR5TcwM-j?0f+dc_g5 zG;J*mrs>@Wcyg`%4%g~oB_(-Hi9po5Dh3uP=kY7rxzzko}&DsXpvHsmjOhdoc-t7FTem4o&AiNZUaRt$#_A@ z!#HIrjPKQUyPtYXWQY?T(nIYh`Yu?2>O=0eDNAOQP8>5VD_WYi&VA`4`|p`lzjpBc z!B@w{gq&%c?B3$y{IWG0L)oFi-fK1*hvQ@W_RGwTFQ3?}^>Xz1ZuI!D{aN@3r%QoH zoybPuSKT-mJc(R!@Dv33@xp2%xgY6Cs@d2~{W<$Y=75Z|S4`Wr{-L+rkGn3rpzTWg z0reHz>GFB?!ObI$vya^|ddjqsdmrrb4hJk0fky>Gb9^?Jv+FyE+SQ?u((M)P2X7yE z^VxWOb@w-%tlk}5IM;Y9`GUk7AkU~*O|*9NNrKyvY|8E)DwwUi+e80D4(0>DRXahk0JWs ztsXNDgZ`=TWQsJVqsCr>)M@FON6CkehJ&Q{F8sj4P*+OYsS46kQ58qWXv%-SGMCh}=`Xnu;Qz zrrDPaLVU7S)i;FVzaV#)y3J43PJF#>;_g-FO$m(58TV4z+@ihbM4+OjQY#qE}N)Pw2{M1O`*;W^-jV<5_k zqaOIwRvglKrnV}X)(L&W&_;$-c7HORpe%D61-{tT2a(kF6XPE^T`du*2#(5auN~dm z(lmP7^wIKgoT(lWF;w@;6)`wAzJ1%4Ew|mVc0J)8drW1$y6)WL^Zpm(TW>6LRt>o0 zX>nS#h|gDERabfW*J3SNZop1#4aS!t4Qnh6393LWxdl!fviuGQq7_r7wR%vnTZquK zR(g+VE;E18IYQEb2S=rh($YaP%NU=zap71;uuxrd=3UXe==RINAF$v;(|d)H6^4bn963MS7Drn_71s~Y%G)u?S*bXtjCdF z1sQoIdB8j>k%d}XGcr<2!YN+RqqK|Rv*$^nMSkujMTG}do&2FF8xt&f9N>)eCq%D+ zPMkhErm9tY?-ZB7bo}n>=U2^rY3kLN@BGosS)!tK%=J6(TmH=*?;_%4=;r79*ei|K zUj3-3QjCgKjvhawNtE5*zrIa4$B%dz`T`zP`_v6gJHOP3%>On=nv7$F6j_pO3R0T- z9o`hXU-h@N3N@@?4Ca|GaxcROnW$BPezR{>DW@nyd@9#^hm$GzSKV-{aYg%s@>+4; zt?ln3cSY;awrr}%VJHjE9@$oZmwfxw)r8eHV0AKjl1ryZnb~SK4yP!qYl@nepYE5? z1E3i$`&rWvDdI?-+Ul?{YS~ClkAf~FC!~Vgks>OHvuhIk1TKplDE_Xa_0%W(8!jDL086vP9m3# zpg1nRZr`Nlx3{C6C1TWvXKLv!!||47{1)1c$x^NHINm}MQ9}NZIX1tms7UflrHCNP z&-b>p=I1Nv>6ueo(@PX*OREx2%0Hd5b+aO4dbPBHr4-}E6vKeyX{owED&^A)llkCb zbG>o#x^XQnzxzOQN5)<<`KjLv-O?SYY zWh0Svn96Mxwrst!La(T)tt#$aTv%Qh(X%C2wkwm$DpW=yHRZif$)Fb;IJjmwd6#g( za5KV<&lCAn(Ta^Rh0P3xqd0g%0+PgSdPdAsvA<>0)P z6?+?Ub9(2M4w+iJaK(Ua(Rfau%6Upc;OR$RB{U zcpOxBNLPsGd1q0JD%8tt6LEjKbssxLng{Uw9(6tDf!^>eiKGNFQMVwsB%qY{DJjqk zBBNUia&kPGX(2u27zy#wB@}$HPCu9@5E^Z1O-rWDBR8lX);TyN@?+3IlIf!nszyQM zZW>D7+B#`++dY&2;&#tH^3)$rK7DkNGgnN;jPm!J|L^-7f7Z6>B9VQ`hUm`q#>tzn zGX4>nb+4$08z;Oo?!Nxa?f*QJ84(S&kp&lG^gJ5cVJg@+k?jiRE?5rg6BZrwbJ#6n@5B1UpF2=;u?<*43)S6QNW8%z_mhsBPnc~$nz56E$KyeSjOqsw{|bLM z${;|3ix7M)9uOl+CF8KGyB<$A(vDf7z)*)Y%(%wfd8H=ysk<>hPVDl;_d9Ox{zS)* z@I;@^C&U<|y~pki0sD#|uQux~i;a))1ndhUX;1HX7SFh74`@CEORR3TlJE}iXh&av zN1l$>6XQBk%qQ%Lo#yZGM7v{8@`>>siur^iF&gA&Bg~jjAP|328_D(#e6QNEDfzt# zQlR_0DY8xFvm$yoc)CKyn1H_n=(TM7LWMnUlllG>zMjh0)A+iD;S7dX^Sd@MyoTXMhSxIO#PBYD?>*eYz5Mq3 z82*^yUWPwmxR2pa`N{hk{*2*%h7T}&nBgM~4>Ej|;V&6J&hS^=r-EUWVHLw_hP4dq_{n;rg6PL^ z7>!pjCx|8*wO}3)%mbo@Kb^zy0)`hcT+L5j(eVbJU&HVRd}lqsYl^Yvx?=?aExJ3hvz>-hdg zhMO2}VYrRqLkyWq&hSfu zN(w!%XngJBYd2pr|0q7blg@Xt7-lof;rqD^^Jt_>K3^B`bs=9D@pUm@mog0Vod{p| z;_EWL?#y)4d|kuWb=<3ZhW!{0VA#lTD8u0ln;DK} zIG!QvC51JT(!zIUFr3M77Q;4%OihKUsmvpqDhn7cVz`*$5{8#BTt-}>EN8fa;dXF~ z#u`;)jjFLm)mWoyu*L@PDanz>8dYPBs=-fkBkqtiX{=E-i8QK)_yW358da01|C&S^ zRm15FLDHz2L>g6-NTX^JX;ck1c7mi)HF!Z0B#o*`q)|1AG^!?%M%5(JsG39?Rg*}g zY7%KwO(Kn|N%u1(jjBncQ8kG)swNSyY7)tsCXq(fB+{swL>g6-NTX^JX;e)jjjBnc zQ8kG)swR;})g;oWnnW5^lSrd#5@}RTB8{p^q)|1AG^!?%M%5&eVof5As!60#HHkE; zCXq(fB+{swL~^Z3q)|1AG^!?%M%5(JsG39?Rg*}gYOGN;K^j#Pq)|0N8dYPBii9kD zO&V1bq)|0N8Wpw(hNMw7K^j$Kjj9RKsG1;+stMAlnjnp;3DT&VAdRXC(x@7ut3d_U zsG1;+s@ zqiTXQswPOIYJxPXCP<@df;6foNTX_kG^!>@qiTXQswPOIYJxPXCP<@df~m|JRTHF9 zHNmuCjj9RKsG4BRvqsg#M|_7gswPOIYJxPXCP<@df;6foNTX`3Q8m`68f#RIHLAuM zRb!2+$&0BSnKY^!5LHJLQ3CX+_hWYVab%v{PERg+1hYBFh5 zO(u=1u}0No(x{qD8dZ}?qiQl~R81z0s>!5LHJLQ3CX+_h)#u`;qNTX^BX;e)ijjAc6Q8k4$s-}=e z)fCdGnnD^?Q%Iv~3TaeLA&sgjq)|16G^(bMM%5J3sG33=RZ~c#Y6@voO(Bh{DWp*~ zg*2+BkVe%M(x{q38dXzBqiPCiR81j`swt#VHH9>)rjSO}6xK_uQ8m`6nnD^?Q%Iv~ z3TaeLA&sgjq)|22s2XcjjWw#KkVe%M(x{q38dXzBqiPCiRE;&NrjSO}6w;_J?A(8e zIP!4EF2LRlV+?B;#xX9BR1bQ2qz1gvBhiRF5{<|sZQ*BbW_Sz3oeXbfcpJlA4Da9; zb~C(_;U0!}aXT;bGp{gwmEo@${+Z$14FAILJ%S>Qp_ieLVSr%?^;U!#_NMklABL3- z`!b9%tYJu$@(7}oNAS4BNN#5V=;#qk87}A6F5_ob@TV*JdKJTs+|Hf+%w7EHUcUY% zU;m2X6MW|>ZtdBQS!kK`vq$`iKYfSWF~@b9ug@|x2+9&enxQ=M9C}_ppWY}h;p;1@ zHTeg8eHA}*HN$K8&b16TGrW%B^$dSXZz_0H1;a=9{z1N`dB-C^#_&nL{}kVU zn&0>g-{-N&&++vkhA%Pv9X~_!h)4cAf9oF%zhKzTpYrIGRC-2XYAQ5Scoe3o5~L@U z5WQE);Oo&0$1ohna00_g45u)h#&9~rR)*&>oXwE2r!e-E3kiqHe1;1dUc~TXhD#YP zMWZ&%cjnJrJO zE|F~N63M165fAGuo4O!6>Vjkwb|8i%n>x#;E=V?YmQ7udZ0dq!Qx_zgDBr=5WK(C^ z)LAxlmQ7udZ0anVIxtUdl5FaNWK$O;o4O#`)CI|=E=V?YL9(d}l1*KZZ0dq!QwOE! z4#}o2h@W+qO`T;^7bKfHXh%x#;&a$b?B%3N3fuE|YBPGRdYclWgiT$)+xoZ0g_;^oM0rmq|8tnPgK3x6pl(O1?o4QQ0sk3bAGRdYclWgiT$)+yz=vX#&mQ9^y zQ)k)KSvGZ+O`T;^S4cK>g=AA#NH%qaWK&m2Hg$z$Q&&hfb%kV8S4cK>g=AA#NH%qa zWK(C^)LAxlmQ7tD+0+%1O4U0;zcr*ZmmMj8+1vp-*pScniaw3~yz48^c`;Njgd(9rXMw3}0pV zYlgJuDS>nlq%}_oqyrGrLD0+4$1uQd_#w#e68-s_-y-10j{C#-TX*yIX@+MR8U%qif==qc>}EKF zp2r%JU_Qe_hQ$m^8AceEF)U|T!7$3OieWXwWz;_KMsNkg?dUl&4CB)<^CUd`_?oye z%v={{t_wp~(;ecvFmyFR;<_+&H9_LHF!Ng&+L*41-@?$w1c~3m%x_`lw=nZtnE5RX zZH!N$jR_J*!QYJ_b4!@HB@FqcJH#zv$S*)VXlZUS43pu ziU@N>gt;Pu-2~ksu83eCL6Ep2g1rMl;))3N3j~QPBG@AkB(8`+YvC=-6%po&2&CzG z_zzb|Yp@ch^-meFN04$0mN5>?7(ZoYS zVJrk`EM+{FG9F7AkEM*qQpRH`wXLefTmH#LzM9lWjsU~4^hTLl<^Q{JVdej zq84^Dypthf|8VCnZinPO%21qKu^|V=2m5iZYg>jHM_f1?@mm z2==D-vHBud$*?cO7{eNdb^K&K^#RgEkTgaVQbX`8LxUis2A^UM0#at5M%8WW9<}U?G$6}6l3iaW9<}UnT@e_im`Tzv382F zc8alfim`Tzv382FM8{a7V=U1zmgpEubc`iB#u6Q4iH@;E$5^6cEYUHR=om|MjI~pY zwNs3>Q;fA!wd66r#@W5jumtP0YQ|DEeukNYMA;pJh~dDehpKKnEEwL{Tilz4O72{ zsb9m?uVL!fF!gJg`ZbJ!8pc2kW1xnqU&GX|Vd~c~^=p{=HB9{)rhW}mzlNz_!_==~ z>en#!Ynb{qO#K?BehpKKnEEwL{Tilz4O72{sUHX4Hp1HO#TqFN z?9nyNO>y9GIUwniIP1nZ>&7_i#yIZLGsB?`;;_cklOq|9V%W@ZBIpvAXpazwHJ+ZK zokASec)F(jLLAn3dLwZ{T%uJ+T$;&{)*f+b7Q@-xH?q~oK`DaQFeF=j9F!tRw)!~h z*P4=8dXZRXJI=_p<+E0+IxN%tf37%v~tI9ZR z{&a`dmT_4A>6&&laoGRq`aQmWpRZ3-&xM_#lVK`D+V#YRho0fNDK2!rrWI*i`1zXF zrEwAD>kxk{lVL9LfGA{0rvq_59f;#}fZj#&9v39z8J89^Lp1i&iJ2nf>b7RN~e-6yMTT%6%M?F40+z9lORRfe>(iu1}U4of@U1$o4G zVQEKeJOjpIZ>KvK(5H}7T*EqzPa&;zUBK65osPpgP4~$<9f#x+4D%hbPREsAd|k%Z zz4@A~({ZH_Uz2q@4(l|v5asK>d|k!YF}^12bR5=cdZv!A>lyZAIDlaz!=Vg^Go)Q) zTw!VD89WY4HMK)~gt#)EuW6?c=h-~2uoUy09#>e3d1jBpj!oa9y+a(m);US@@)S(3D_4!$O9|3`-eC z7?v?CXIQ~7$`Fz4_%34W{~t+jA0FpbpZV*V>2CQIn$@awQ+2qmc1tpO0AoyFggus5 zy--73(h3qYVTl5X{p05!VQaE-2&-->rIJQMYzl19TNF!^1-%&Aqs#Hi!IejnBM+mg zP!vVjtN1+-BfFq>yAn?I(qZ<#Km2oF-|Og^=bUqY&$-X{oag8qeZ~AYD)}yz(`a?w zC3PJY#`&wGwOvwIqhqsO($yv5hd{U6U1fVg{in0+kAe??50btQ`(xNi?1w<&m;zhDHn5#1J3#%HrJmRS-U#(Sal#(37yK5vd>b492f-n57(5Do2OI&9fycoN zI0l{qy+*oA%4s|ej)P~&F$+$Bli)OEKF2d&gWaVsq5f?idj`9}lYfUji~W7^kg^VAH>(czzH4ONwWk{w2k;4NFoy z+n?Z9j$U?YcH>+ez3hs968lrwa45xd`Y$;AG=Dt^>i;E`{#o$Pz|RR2s7C_zNT41G z)FXjXA@X zX0&=FP>+P-F56a*gcQ|i^++i0@{?ANgyJrv)gys=Bv6lp;x4CHJrat$j8>0?_E8wE z9trKEFj_ql+DBoudL$Hg8Lb`(?V~VSJrdeSVYGTAP>%%akXAS_5~xQ)`zV}l^++h%%akw85X8bie`>XAS_5~xQ)@si4bdL&Sf1nQAMJrbJZ=vRuDRA$9X zwyhos#Y;}HdL&Sfgl0XqtsV)~BY}D(Gy`(F)gz&J$+p!afqEoRj|A$GKs^$Qm;6_& zM*{UopdJa-BcZSPPPcj_P>%%akx;zkT39_2ikEC#JrY{|uucC$Jrbx#0`*9s9tqSV zfqEoRj|A$GP`uPH*=-k%$0UCSK7@w-frd{yP0w9X0EZD6{_9L z8g?^Z*v(8~H!D=TnFZ`tYgArphem7BZX)O1tQzem=G;xRxtmp^-Nc!@#h9KXw%kor zxtn-$x0rFdW60e^kJZw~ly-)B-dc?|R!bXgyVljzx|&*7Q|oGJW3SRb1bQbxwY1Ub z5usYzcuwg3W7X0|r+fccwY1T;_m5Re8%KrSKUQ7ll2l6}ontfD0(y5%wG`6mJvP;_ zT@BmSuw4z?)v#R++tsjLEroPm-v$T3L2w8h29JW@0sWP~S_)}A4rahH@D%8;iq%p` zqrZ(-OCgQkX;#fnvuY`%ZSORzmO{GB=XfTE{XOhF_6&A`y8j*aEcW-Y=dfSKp2vO# z`&IA<;016Aya-+fuY#VFR!bp`uY*4Xe+0e(-T;3LdS_a-6w>IOY1L9l;~oC16jC*% zHC9U@ZM#iYOCfE$WmZceZF|RBwG`6m*rr+vY4k3&YAK}AyVRGJ`{;Q>#PWiCkEX~w2(oEyW{WfW)ZGS(lrl(X(Gi`fcWwkU@ zf0bq`MVe{*x3N8Uu9jvx{hio%gK<*s!49$Ch5c^q_h4_selPZR?Dt{szO;+#FiIeUn6_7LanA%56HOlK{}9|Fy=dh9_eOX>^Y;(wzaQRJrjwG4y7ScdR^eW9-%IX$ z$$c-m?WHQ5$~=D6X}mBxa;_t0t|O+cBVMf|Uaccuts`EoBVMf| zUaccuts`EoBVMf|Uaccuts~m3)5@OT>7r;cc+j%cTjXs1qnR=*{}sUx>gLwZz-v8h)-jDb9k;^`E*+(w>$Yme7 z>?4^ds+9-B`PyMBVY ze?n1#QefZ{iVa4~9_CjM^Q(vX)x-SiVSe>6zj~NoJR8K3arxn%Hit1@a^|YdT+Dtudrk*xaPn)Ty&D7Io z>S;6ew3&L^Og(L;o;FiY+o-2))YCTVX&d#lhkCqUkMHX7T|K_5$9MJkt{&gjtH*cs_^uw`)#JN*d{>X}>hawpu>A;ZYwxZ2*N!>RE4Pop_9L+U2y8zB z+n-`oZIZS$lr>3PjGluuDT*+9e_B)7?_#?(HkEmAXH%K?r!|#%e_B(S_op>6Q)ptQ z(8NrkiJ3wZGleE*3Qf!un)F@L&pQrpVs_TV?5v5|SrfCfCgSHNW@k;z&YBcy=y~Gd zrofSKlOheHzxOriYo^ir)0zVBnr_n9Oruq+Nnb6U?)_;^f%m61MaukFsh@r&^)ou+ zY9i`uBHn8v(rZ$z;&jJ&O^Q{FNzf5p6R}(qQCt)8TN9C6Q}hYHKiU9#A7B&v)0*MA z8J?Trxf!0D;kg-}o6F2|GdwrLb2B_Q!*eq{H^Xx?JU7F0GdwrLb2B_Q!*eq{H^Xx? zJU7F0GdwrLb2B_Q!*eq{H^Xx?JU7F0GdwrLb2B_Q!*eq{H^Xx?JU7F0GdwrLb2B_Q z!*eq{H^Xx?JU7F0GdwrLb2B_Q!*er{b2B_Q!*eq{H^Xx?JU7F0bJRRH!*dHfx4?4? zJh#Ae3p}^La|=ATz;g>cx4?4?Jh#Ae3p}^La|=ATz;g>cx4?4?Jh#Ae3p}^La|=AT zz;g>cx4?4?Jh#Ae3p}^La|=ATz;g>cx4?4?Jh#Ae3p}^La|=ATz;g>cx4?4?Jh#Ae z3p}^La|=ATz;g>cx4?4?Jh#Ae3p}^La|=ATz;g>cx4?4?Jh#BJ{?|}_NB`{sS~pVg zoPy^RJg4AU-z0g)x{-os&B^4i6g;QkIR(!tcuv7{3Z7H&oPy^RJg49}1TCgg69-Gr{FmS&nb9L!E*|pQ}CRE=M+4r;5h})DR@r7a|)hQ@SK9@6g;QkIR(!t zcuv7{3Z7H&oPy^RJg49}1TCgg69-Gx59HPJh#%GTj9ACo?GF$6`ot+ zxs~?Z3eT3eT3eT3eT3eT z3eT3eT8W@Z1K^ zZSdR%&u#GB2G4Eq+y>8W@Z1K^ZSdR%&u#GB2G4Eq+y>8W@Z1K^ZSdR%&u#GB2G4Eq z+y>8W@T?m{)yvx8xecD%;JFQ++u*qkp4;HL4W8TJxecD%;JFQ++u*qkp4;HL4W8TJ zxecD%;JFQ++u*qkp4;HL4W8TJxecDb!p_om7;cB*cDQYa+jcl?hr@O_Y=^^kIBbW* zb~tQ@y>{4ZhrM>#Ylppd*lUNqcGzo&y>{4ZhrM>#Ylok9>fTP>+o^jyb#JHc?bN-U zy0=sJcIw_v-P@^qJ9TfT?q8*j{|$T^{2TC@GRJ1mlsPtgMytL{Lhtx`Mr~i6%v*XcFJ|YTL-*# zsITe$@YVru9q`rxZyoT~0dF1blIP@F>f8} zYsv-QI^eBCeeGOXC%kpSTPM7A!doZ2b;4UGymi7`C%kpSTPM7A!doZ2b;4UGymi7` zC%kpSTPM7A!doZ2b;4UGymi7`C%kpSTPM7A!doZ2b;4UGymi7`C%kpSTPM7A!doZ2 zb;4UGymi7`C%kpSTPM7A!doZ2b;4UGymi7`C%kpSTPM7A!dn--b-`N~ymi4_7rb@B zTNk`_!CM!+b-`N~ymi4_7rb@BTNk`_!CM!+b-`N~ymi4_7rb@BTNk`_!CM!+b-`N~ zymi4_7rb@BTNk`_!CM!+b-`N~ymi4_7rb@BTNk`_!CM!+b-`N~ymi4_7rb@BTNk`_ z!CM!+b-`N~ymi4_H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{ zH@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7J zb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&?u$^}t&Xy!F6a54`oj zTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&X zy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYT zz*`Tz^}t&Xy!F7F{vTH(k^V~$^mwY>cG5lV29h53!doxA>01gZ9v6Dytry;U;jI_m zdf}}X-g@D!7v6f|try;U;jI_mdf}}X-g@D!7v6f|try;U;jI_mdf}}X-g@D!7v6f| ztry;U;jI_mdf}}X-g@D!7v6f|try;U;jI_mdf}}X-g@D!7v6f|try;U;q5u`wp8|< zcr)H5PM#Ad#%8buOo6Rn8#oQ-z`Rkl6RP}rkIHZK4xHyye&cU}-tqOE%5S_Iya#+2 z_#V(Z!Jbq3jqeA&6YL1(JVH5-P|hQi^9bcUBH#HLm-C2xXLLD_$ZJNI^N74Aq?|`6 z=Ml~!yuNNZKuw)aS+*&~r= zk3?EuQk;wTNTkJ#(R(D)V#eq_5@|7GZ0E@iuoLV8yTKl?7xW&9beZ=^r1h1==sgl? zeI+q^k3?EuNsQhjk=FXQ(R(D)?2$-oecQJ8NTjvCZS)?AGeRFZjkH9y;8=&_{q&dAO z9e9sKnmrQfz4!lPq9e9sKI`AHebl^P_ zY4%8@*&~r=k3>4~9*K0|Jre1_dnD5Akw~*gBCRiIDv!RP8NEj$%^ry~dnD4#AJgoS zNV7*Gt$v|r)Gv(QBav3`u4;aG)A~kW+u!%o>NWZ+dnD58JGQ+?BCQ@|+j}I^ z>PNP{MT9;WM2%-XoEY(ks~`k!F^i zW{*UgJre1t_ei9p-XoD_k3>4^JrZg5NTk^#@jU-E_B{VJ_Pq3@x9oXhgXf8+o>zZ& zN;B93rodLP4V(sZVBW}x|2!l9^Nje<2enS;zs8>Dzs8=I_mv_q8~tBn&&#vMcY=3= z_kiyL-vhoEd>{CJ@b`q@(mK_O&|jRt75Qb*yA-}n`nO5{HtFAvIDLTh0n!IZA0T~@ z^g+@GNgpJAi1Z=She#hHeVFuN(uYYOCVhnT5zi!i zT*k;{j9kXZWsF?L$YqRN#>i!iT*k;{j9kXZWsF?L$YqRNPLazgaydmVr^w|Lxtt=G zQ{-}rTuzb8DRMbQE~m)l6uF!tms8|&id;^Si;mq@f6=M=pjGHaa(R(lUL=l|I zd68URB$pS-4$ zi4vzZH}o_94mGX0q0!%=ritRFS#zFd&3T$N=V{iQr&)8JX3cq8vqC@b@7L2rN7KYb z(?mqmL^#vLHq%5k)2uvC6R}Jat4tH6OcS3>Yc8qsXfA2=y8U$E@7L3sOB(NUE}Ans z-QTaLHD?rR&ZxhNJ^f1T868nfGa^qj7Edz@Pc!~bGyYC9@=i16PBYq0GtN#k!cH@` zPBW@bNB#YJI_mG&)0#6HeU6Pz$5g-2nQcaVcMjj>;6DfdIrz`Pe-8e0@SlVK9Q^0t zKL`Ig_|L(A4*qlSpM(D#{O9052md+v&%u8V{&Vo3gZ~`-=iomF|2g>2!G8|^bMT*o z{~Y}1;6DfdIrz`Pe-8e0@SlVK9Q^0tKL`Ig_|L(A4*qlSpM(D#{O9052md+v&%u8V z{&Vo3gZ~`-=iomF|2g>2!TY5`UYuv&oC z0(=(WvjCq3_$u+RakCS!y>+?PjUnEVY}ZcC*xO zmfFoyyIE>COYLT<-7K}6rFOH_ZkF23QoC7dH%skisogBKo27QM)NYpA%~HErYBx*m zW~tpAwVR`MbJT8*+RahBIchgY?dGW69JQOHc5~Ejj@r#pyE$q%NA2dQ-5j->qjq!D zZjRc`QM);6H%IN}sNEd3o1=Df)NYR2%~88KYBxvi=BV8qwVR`MbJT8*+RahBd1^OL z?dGZ7JhhvrcJtJ3p4!b*yLoCiPwnQZ-8{9Mr*`wyZl2oBQ@eR;H&5;6sogxao2Pd3 z)NY>I%~QL1YBx{q=BeF0wVS7Q^VDvh+RanDd1^OL?dGZ7Jhhvrb_+xZ3q%MDn$0bh zEtGlfccIK{zYEegqrV9*NabvM?RP=5Jg4}Z;DT0ljQ*Copj92CzX>j|_Pe0f65Ba2 zZbBc{k}?+^(s-;tGYSv>$-{JcQi|Uwd@bE@6~?`yjpfYSO{TMMMSQV{FBb8|BEDF}7mN5}5nn9gi$#2~h%XlL#Uj2~#21VBVi8{~;)_Lmv4}4g zwOX}Qwumnl@x>y(Si~2L_+k-XEaHnre6ffx7V*U*zF5Q;i}+#@Uo7H_MSQV{FBb8| zBEDF}7mN5}QR^@&1HM?q7mN5}5nn9gi$#2~h%XlL#Uj2~#21VB;yk+oE-Um&`^Ky-b9==uWD^#!8q3ye?~7@;l@UH>og(&_SQ z2|DK(^c-i2yq3soiM*D`Yl*y;$ZLtbmdI;~yq3soiM*D`Yl*y;$m=!ox=3CZ$?GEZ zx=3CZ$?GC{T_mrIoR#=Ca=rnb(y>_lhtKz9aUdP)z?w=byR&FRbNNd*HQI#RDB&) zUq{u~QT26HeH~R_N7dI+^>tKz9aUdP)z?w=byR&FRbNNdH?)SoRJKv(xz9$~UeN!+ zvB3`T4R(NUumgO99pD@60N-E-_y#+`H`oEb!4B{Zc7SiN1AK!W;2Z1!-(Uy$20Oqv z*a5!54)6_jfN!t^e1jd}8|(nzU*&X@{eLSP>;T`0`u}Y= zqW(Yq4R(NUumgM(-ZtTF6W%u2Ill>SoA9;?Z=3M832&S5wh3>W@U{tWoA9;?Z=3M8 z32&S5wh3>W@U{tWoA9;?Z=3M832&S5wh3>WW#(-Y-ZtTF6W%rh^R@|ZoA9;?Z=3M8 z32&S5wh3>W@U{tWoA9;?Z=3M888vU4@V3d$`AvA+gttw2+l04Gc-vAhd!%ejz04Tb zZ@1`KTlB0gde)Z4GN*g2-_nR?+uq#LSawe6Z$Ml0yDj?N7X5CEez!%x+oIoXajM=H zr|NC#Ok=;TAM~kuTlC5;dgT_qa*JNMMX%hVS8mZOx9F8y^vW%ITPNCG`ja~X_Pen3;1)RMoIluS|qNd zMMkeYY;mgI77DP10&JlGTPVO53b2I&Y@q;KD8Lp9u!RC_p#WPbz*cm>OU0>rThady z`~L?Y2mcdz2zePfPf;gilNOw1iJf__TyiOZc>e zPfPf;gilNOw1iJf__TyiOZc>ePfPf;gilNOw1iJf__TyiOZc>ePfPf;gilNOw1iJf z__TyiOZc>ePfPf;gilNOw1iJf__TyiOZc>ePfPf;gilNOw1iJf__TyiOZc>ePfPf; zgilNOw1iJf_Ngu=)BhU^^`B)z%|wL118OEBTQd=%W+Fn(M1-1&2sINCY9=E5d)uCg z2=)JWx~WxqE|i`NrGY~IHA6sPF4Q-Dp}y%0^-W)> zZ~8)g(--!F&+&#Mp!8hnY9~VVeWCikP~Xsn`g$(ZcXOe>g9~*^fKcDQg*S|DCqkXV zEvx|F4oc6JLS5WWWN!nd=d#uJh0=4O^js)C7fR2C(sQBoTqr#kO3#Jr`$6D#B9xvB zrRPHFxljrm1a2q7`$7HZyX=pE4}kl?B&e^q`m1IWLVd9n>RYXlx4E6j{(nK~xoq`) zq58g1eP5`)FI3+bO3#JTbD`Tw6rV=%X%wGE@o5yFM&0-IjC~r#r%`+w#ivnx8pWqk zd>X~4QG6Q3r%`+w#ivpCeZ9v%jk@m(?b9eejpEZNK8@njC_ati(A1-r%`+w#ivpCeWlo^QG6Q3r%`+w#ivnx8pWqkd>X~4QG6Q3r%`+w z#ivnx8pWqkd>X~4QTP2Iich2N`?BrRsQbRqK8@njC_ati(T87_%w=7-y)x`1aFZ~g(|I4U#o*V%JfZ2sBcn2vvh|%drqiT9idiQ zgj&@RYE?(5RUM&Lb%a{g5w?I@)sfu_wt?E|trV^52y2s*X^rI>JrxU%;Om#lKOjIzoLr6KYi_xWg+6LapiuwW=f3s*X@A3Br3o zt?J0us*X^rI>PsXTGf%QRUM&Lb%a{g5o%RO_;r=M9Nx;|P51ulN#6n83G<=>70k4sYe~Rt|6F@K){> z7(HX&%HgdX-pb*vTYwpaR}1;H?7QD&S4`Wvf&b@KynD74TL8Zx!%X0dE!X zRsnAn@KynD74TL8Zx!%X0dE!XRsnAn@KynD74TL8Zx!%X0dE!XRsnAn@KynD74TL8 zZx!%X0dE!XRsnAn@KynD74TL8Zx!%X0dE!XRsnAn@KynD74TL8Zx!%X0dE!X_I9s? z1a~rm-^mDmr%wz}%7;LYICpv;D*UjRywkH$;m5#lf!_uPz(H^b90req-vLL!W8iTx z1CD{Gz!$;qf~Uc8@ErI(a0dK4@cZD);49#(;19qH;1YNd)ZAa?*Bn-Oof`cRd;|Qk zG59zBYw&NuUju&~gc+Y0pufTi5zC!KEO+|EfZ$Hge1kiEVu0|s!QTPnUZ2{u5AZ4*DxTisB>Bot0wk zx-GL9l_I{<$ zixArTl|C;*Xzy2gy+Ua3S9-ldXzy2gy+Ua3S9-ldXzy2gy+Ua3SNgmNp}k+}^CE=y zex+A1g!X==S1^S3ex+A1g!X==S1^S3ex+A1g!X_m3Y4r?^ojeO1xi*_bYu~L{J&E_ba3Jex-Kz8SVW_pBEvt z_bc&!CEl;Z`;~aV67N^y{Yt!FiT5kLa-v_^`;}ff5!(Bec)t?wSK|FjykCj;E2H*) zCEl;}%1IEz`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9 z!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+ zF}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3 zAH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc`!T#9!}~G3AH(}GydT5+F}xqc z`!T#9!}~G3AH(~1Y24KRQJ3iqcA@rZ3$=qts68!0w_ENx5?Y<^DziG>Ri-o8g*xL} z_#vLW57ZggO3|s#LY=`bd;rwx&9e7l>-1*XNo<|LE?fI5h1Soz%B)d$c?DkRwtAOV z;9WMI!7kJp?7|i>1-621U^~xufSq6$*bVl8y`auu*L!pZyHIDa3v~v&P-n0Ubq2do zXRr%(2D@+sJO=6vcBSYHcA?H-7wQalq0V3zeizgk?6P$RyHIDa3$vikV3(~k*o9M+ zL}#$e)*0-=9JbD2mz~Gf8SJtPJgGC-WzS-NAA1g4XRs@M9$ROy%hnm}LY=`b)EVr; zB~WLu%hnm}LY=`b^c?ms^#$9nW9tld*+0V88SJueVE-6<(v*!7kLD*Fx={6>9gaP`hV^+C3}O z?pfg9!j+oCZN@vkCL@RvaC z{Z@+hehWYDycCb=x9aJ78*{O{)Zd+Qz<*VoCR=@9e^s<*TW7Efbq2doXRr%(2D|WX zP-n2qz6V=pu*=pN>_VNvE_@HR&S00VGuVYXgI%aI*o8WSU8pnIg*t;>s597wI)h!P zGuVYXgI%aI*o8WSU8pnIg*t;>_($L$yYA8ur`(UNGuUPSDYnjFm;Dj!2S9o;v&*}r zF#cx!7kgY3U^6`Z2yA8Ps8Lv@H60N!9N2( z2mWV%r8C%ryESqdb&^|fx766ElibvLtZ8vHEsmze(X=?4#ywg3t4HBDnifaX;%HhN zO^c&xagBftdd6)gj;6)Yv^bg;*J$W;Yg$}mqHSwhyv&*wN7LeHS{zM_qiJz8Esmze z(X=?47DvH+X>t93ib{^A#r6LwwykO0ZYH#*amSg^ znifaX;))GyThro-5Nuo1;(;|S9$3@jXj&Xiiz^?sOf)Tyrp3{;IGPqm)8c4a++UgX zq%|#$rp3{;IGPqm)8c3v_pIp|+9#S8N7LegH7$;&#nH5Q#F`e5SkvNYS{zM_qiJz8 zEsmze(X=?47Dvl|yj;6&~8H=N7+&ZURtZ8vH zEv^{Jwl$3#=!EoQG%b#%aT}e|t!Z&IEv^X4w&RmHn#TQfvaM;{QYW;g#nH4lnifaX z;!$f_JZepg>;GAd*0gxknih{*)8bKUTHH4#2lt?9_n>L_plSD@X(5^xqG=(T7NTh( znidkLg=kucriEx)h^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx) zh^B>TT8O5FXj+J-g=kucriEx)h^B>TTF5GHh^B?C;)ZBi$SQ7#riEx)h^B>TT8O5F zXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx) zh^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J- zg~VwgnidkLg=ktxoED;KA(|GVX(5^xqG=)P*ddx05~qb|T8O5FXj+J-g=kucriEx) zh^B>TT8O5FXj+J-g=kucriEx)h^B>TT8O5FXj+J-g=kucriEx)h^B?aX(5^xqG=(T z7NTh(niisIA(|GVX(5^xqG=(T7NTh(niisIA(|GVX(5^xqG=(T7NTh(niisIA(|GV zX(5^xqG=(T7NTh(niisIA(|GVX(5^xqG=(T7NTh(niisIA(|GVX(5^xqG=(T7NTh( zniisIA(|Evr-f)*h^B>TT8O5FQO9W^niisIA(|Evr-f)*h^B>TT8O5FXj({|7NTh( zaaxF`g=kucriEx)h^B>TT8O5FXj+J-g=kucriEzQyQN)A!Mmke#=Eq}@@}bwu^H5V zf6GpR`tNVqZJ_@9TeklDTd4p34&JTSB9zDV9(mmOADtqf8h;D?_uxChyTN-v{r9(? zc@L=n{+6x(QWxsK)P?%*?_e9{+(tRKQO<3Ya~tK{CN=XjF6TC>nbGCkCS@?XoZBep zHp;n;a&DuX+bHKY%DIhlZc}^H^J-~Emvfuin9=3jMme{sMcH;aw^7b*lyf`f+)g>S zQ_k&_b35hSPC2(z&h3SQ_k&_b35hS zPC2(z&h3Y=* zz70@FIep)s-bOin-=EScr|^7R;$Xq=3G^_7xWj0D#a(p2SBfESC#F<{us7y zjZw-&pxLexC(f%GYyov^j8b%Kj8M162-|tG1JtcCO6dZ-!5**|^eT51>zq}rb5^m= zS;abM73-W;taDbe&RNAeXBF$5RjhMXvCdh=I%gH@oK>uIRzq}JKwOe6 zH~~(Ax-~}WUIVX^A8mUjyh`4*?e*{~#UB2xSH-Iod)W5cc$H!g+g>5BQtV;-73^0* zuaj4?Qd-4IX%#D_Rf;{F?sf7i#UB2Zzm-%e_Aves{1NyDcmw<~=x?c2iam^P0e=;| z19Tg%QtaWsx+PaB_OR`h_A135w!Pk7rP#xECFqt}rP#yhwpXQi!|1kG6}atHDc&&t z0a$BhShKBS&9+K$h5t&sQd}Wh?O*Lv?cb=|l!Ur9M(8-dN|A$8yh2{3$U(MxhyKdy zZk76o?cera)l+PHoxe)`#kOvZ5qj;kO1;K*h^<>=WP9bIN_2* zph|tp>0WoOQqQve``G?ARHewlm;n84s7jH8@q-|JN|A$0{$Wz?$Nm%SKgF)Y{s=bx zOOb=$K>t$YV4MEMN^+GV2fxkVlByIr*!F5|l_Ce*UahTCed+9pA&vSGa#L=Ugq6Iz9Do}=v@Td4H|raRre3bcS>RH-S;Gp2ELC^ zr+?~6qcvxzG{?5Ru#=h5PHB#9bGTEQqZ5CmImY|Iy`Z_;Da|=2)JY>kop>PBNh3m? zcp%hCBSPKABGhdxLa%H220-VilSYI(X+)@#Mua+PM5vQSgkI0t$=qirbDy2eeReYU z*~#2zCv%^jn)^7fZ-WD%P8w0l5I77T1$EMh(nmm@G$Q*rm;rUth*D00I%!1qcfr%( zIH=oLl%5538;fk+#v;^7Bf@h$qmxEt>!cB(P8t!;U>B&7P8v~)S8{erd2G*Nzl`mb zoSjl0r@spR0K5P$fjVhKf7MANLY*`s^y>6ZDUb1WP$!MZ_UiOb&3cSpo!+Tgk5RX= z1UscXM%~6D)JY@4JN#G8dh||aJv*g5wkt^gHSD)z|2p=a{7NT{=o$C=ol+j7ZetPZ zHWuOgK%F!qTPKYO{{VDP+^IQ^(f!dkJc=u6k#nTIF~`{{Epm!(V+nl!qn=SqHh$di zkrvt3Nh3n9lkoirlUNh3m?G$KrZI%!0< zP8tz@5Tx$RVs=W4obJ`;otnki_G~Mz1aV?mXvZE%M!YMr)Dp&NEtze0QGFTI9R)jMgIGooBQb z`R+WUwa9np8LdUWJI`n>^4)o^g|*0c=NYXmo^5N9@6NMrE%M!YMr)Dp&NEtz ze0QGFT9gQ^MZP=FXe~-;y~Xdb7A4Rk-=-(7&?4Wa=l46__HBB$twjm6$hYa~Nwg?| z7WpP0zNq$hYa)wifv|J=@kI-=^mjYf%C%@@;yytwp{~ z&$hM5x9Qoo7Wp~p3z$5+w_dqBHyNGv=;d`J>ws{)@YG$ z)3a?Y@@;yytwp{~&$hKF5vAXuMZQhXf3+6*Ha*+cBHyNG+gjw?^lV#;5@?Zc)3a?Y z@@;yy;SeoKC@wOS)*|1gXS5diHa(-Y$hYaO2;U8Q_Ox5-Vf0+ax9J%@m+@_SM$ct@ zo1W2g8Q-R7^z6X5=@~sE@NIfV$M(KW&**sGx9J%jtM69(G&(-_ZF)i?WZ$MITO1l4 zRr)qPqvJ{6re|~v>D%;-jvIZOp3$+QZ_`@|xc5rv+Hvod(6!q`?YQ?!wrj_|S3=j0 zd#{A99rs=dT|4f*61sNWdnI)3xc5rv+Hvod(6!^{P=ey6y0HPo&K-_=mN8hlqn?P~B{4YjMm zcQw?m2H(|CyBd5~L+xttT@AIX!FM&(t_I)LP`es@SA*|r@LdhHtHF0Q)UF2K)lj<{ zd{;y5YVchRwX4B*HPo(Fdw?5)+A^KoB6Pf6tC|{h^N7$RU9IYC)X6PEo!lbS$t^;i z+#>WyRLe+IOH^FTNL0&6RLe+I%ScqK-I#vfI$w*z*P`vUsCq3bU5h@~qRh2uaxJP` zi{93X4gFSZ7`@A-Hi&~dxka{4ZV~F_7NNDVR(my_u9I7YI=LmNjp*bS;V=7Fk+*{G z(Y2^bEqYRmlGLIhwP;8!>QRes)QV3(Z>^|BC2G-!T9lzS`h?#fZ2)z0i|nr}7w%0H z{)$@8A1Qa^TZQ+shx0z-llzEI?o+(66x=7a&k4N)_CB#~+)cW7T;Er=2W%px8EgSl zU@O=Lrg?H2I|t^CVo&cEdq(fLzEA8K$%`GZ_pt-^zMzKmT7LCB_9p0^!}p0*p;$F~ zW_KTP)O{Lvl#9j}<8Oi9aebdg6XV_BJ>a{*_kiyO-v_=Q{5|jqzhA5xp9H;g_#s;F zL$uz9f`fYUq2LhMAkH5O4vYVXf+tCNN@aT}XmkqRe+chC6#1A^>fyg0{_BH>^n88b zR#6`u06p`q4<5(<&)5yhy{|v=OiEd@^WInLi09pA^qZq1K<0 zkCuW@$wxvlZ+xrpQGE9(zIznkJxZ+~)q5I(NAcaG`0mlbzIznkJ&Nxh#dnY5yT|a| zWBBedeD@f>dko(_hSwg$M~~r=$MDF0e6gQzvitGKe*N~5V84EAJOFx3->)|~}HM;d4#5)J^ z&Oy9$5bqqsI|l>ztb_RIVBns0P&w*Xw4#G}?VxgWx?9x2z&-0AemsaD57NdyLzzEA znLk6mp9%g(Pktu&@50Ba-Q(2mah`mfCm*MFk5jwHsomq$?s01OIJJA6+C5I~4pEmw z)a4L$IYeC!QI|v1I0I zRQIrWIHzZuh6~wuoxH>T6GVL0i#v-uoy5}bq`bb!>YS&tL|ad-G8;}9#*Yw zTXhes)<&!DVb$8URrfG;JWL%Aqqru5Il&*x$0^Dy&yde-OZSx>?3Q*ir~avu$z zQtrkBpw-|hn{%XWu zjrgk(e>LK-M*P)?zZ&sZBmQcnzKztk5r6%8@D;6Z|AiE3Md)boFQhX@M}uEf`l#?% zjPU$Lc>bcEQHq`!4Zg%1zATnTgD;CEA-?;v@{+B*MuTSc{obHiY%B@C1pYPnH262* z*THXq{~i1$_^dG!@f*~?jK3uGoo*{am$`*9w@~JkO0pEBR1%@eV0@d+WU6)qs z(n?)gsf%xw8V%YgVH+iE6X#1xajDwGw$bHj6RS(A^S@FL{fgcu)UQ^AUjnT{UqNBM zqBl6*wfl~Ig~_kNix#I3BSp2zsYaE$#1{OZ@wvuuc~j5Go5o)Py{_eZaLxtY zD#Mb{5n8wMH9A6jma;ud*`B3r&r-H$DciG@txwO427P))81#wHzF-JEsyFln-Z|eF zOklr+?bW}&;0h^ML9fO21vkJqje5V{ruQ2^2Y%7NjeHr~O4}Fd2A>0m!SDFZkrCc- zisxU%_9|sxbR>f`m0Wf-XWg*qSorZXgT(s&OQ1YdeS!nq=f!I4&MtPJ4ib{7|`?mf&YJ@KN!V! zz4`;!r9U_WW~C?n!K8m1%<)&Rl=cVnyvO@*`-26Zd=*^euRj1?yZ+z;PyR1#ub}n^ zukovk*q1=>(e0PloXb`48Y$O#=j%N4L-0r78{iF|{4w@2c$4REVgJ2&=nsCvdsayK z2kd{OJgeXu>9@f*dD}l@Zy438RUTr1eqsRMh9LITs*RuZ+amvoC;!a(Mm)avM;b^u z%wIi2?~go1%6|d>9CQrdAF*=wNB)W@-OKtTo@@6F?;5eA&8Cpo>EN_?wbD-DZ`y<}n-5>Efe1D{X{e6B#TZ+t+ z{t8@q)xAGL`-xn@rp-jWm%BegJBj%JQ~D#XgUh_<7Wfl;Jc6$y|HyCuH|hVxlm7>M z6?+Z)XV}(+{>VCY@p?{w#Opczk)Qhw(K67ZRe$tf`^l)sp#JFpG82Y>ZqwdTH$&{-;Vw3{Py4R zNvrNc)zN6JPD^2o9wX9G*W!6no+riU&yNN^e_n`651`TmfmM0{l^#H)2Lh|#Kwy;~ zK&1!N-~EhhH-JhH1op@PDm{Qo51`Tm5v%k7Dm@UfN)MpY0}-qAK*TCN5V1-Rpwa^o ztJ#2Btl#!sY%AM9#40@yu}Tj_tkMG!GdvKnN)N!*K!kF_*Z?X$pw{STtkMH&Ek>*K zK*TCN5V1-RsO1=~(gScffJzUb(gUdU04hCzN)JS>(gUcp&*~oyd{(~@4hP|I5Do|7 za1ag$;cyTR2jOrK4hP|I5Do|7&}aVZZE!dUhl6l92#14kI0%P>a5xBugK#(qhl6l9 z2#14kILJsh2#14kI0%P>a5xBugK#(qhl6l92#14kI0%P>a5xBugK#(qhl6l92#14k zI0%P>a5xBugK#(qhl6l92#3DcU^MW(20}O-g2N#=9D>6kI2?k*Avhd@!yz~vg2N#= z9D>6kIQ0DpdM6wX!Ql`b4#D9N91g+Z5F8G{;Sd}S!Ql`b4#D9N91g+Z5F8G{;Sd}S z!Ql`b4#D9N91g+Z5F8G{;Sd}S!Ql`b4#D9N91g+Z5F8G{;Sd}S!Ql`b4#D9N91g+Z zF#0o${tTl(!|2bj7+VU4;b#~X8Ws;qL5qgbqG7aX7%dt`i-ysnVYFx%EgDws{3|Qc zuxe+tE)7eUdW9Y%hE-FixW^5nPQ$3vFzPg{dO6)1HH=0Lqfx^s(lClNj7AMdD-{DD zCH^@|_z&3s$QxGq)z6$x6mgU&;;5nsJug0$W5hAT(a4j2Qmi`VulQ>V zb_%-{yA9iO>Z6JW{D!Y$dxmmUk$_Wr$m=Nh0_i77|DV`n*!IFv_&>_Ha8x6;YAr7~ zy@2h}`Do-7N@b56Wh_3*SbUVR_^8HWr~hx>{7=~b2YVHJ4f|)<_S#WK&!ZYWZF}@Q zs?pQ7N6e!dF~xv9sJcY|9qGRbdXzjGeTV+)8%Y|39)CyF(|d)EYDUz@onk#7p^uNK zk30PeDfZC_z1#PX=t=c!yumv?j*QUGN7R3ni~6r}q@9nb z|JwG5Jfi-qC+WYwMP(`QEh<8_@D-tZnQuZddNe<#mZo(2?=kx0F?!-L+Q2cqe~dnO zOuqJ$m%*!`d*5;OsZpWV2aYqJJ+Ag_`^$RfxY#p(7yMhJO0Hk2%u7Lr{+MAtlA%{- z(3}jtGDEM-&?__a$_!eRL5nhh=OY>UcU0*4NG5O$nPEPXQ4ej9?fFP1cop<~BojEE z%mki~WYm9CLeEDsfn&=I^N~#8`A8=4d?XV%&djLII2X@HGJ)qKnZWarOyK!QMoMV( zd?XWiK9W(p@{^vAWCG7eGQmxr_k1K1cs`PmKKMP3Q8Us9+n$eP0?$V>f#)Nc;5O*_ zNGAAaY|lqB%ttcJM>5PuGAKy~CCM-!$uJ+upwAiRBN^r+8MGxMZBZ`FM>3KB!aF@5 z$wdAV{E|z{d?XY3Yi!R)GH82-`A7zZ&oCd!pz|5#BN@~_!+a!z=4Y6XWFnrAWSEa+ zn2%&4&+|^tM=}x5M>5PuGU`*RFY}R1WR!HzM>32ZnTY2j8Agyy#Pg91^O1~tpMT}~ zNJb;6(esgvMpE0Jk7U&2jMjk+{VpSw^BX+YWTbMoJs-(LXiLmTGEzKq<@rd4`A9}R z)HZDf4a}f{88k4%d?XX`d?XX`d?XX`d?dqsB*T0p!&sJycs`P0M9V}xAIUJTWg?!B zWFn4!Gt5Ua8q-}1&qp%S0p-qoBop;~B*T0p!+a!zqGp(nWKh%$^O20S!cTfWl0jWF z%ttcJM>33(8ELHYm3k-_<|CP?l{O=#O$DRDx66JQj7EN1YSOYE}cL*PoPdGP|g#0 z@C3d)fkvG`IZwdt30OS=pC^bDPN1JBh!ai_C!C-bCw@^27&t+k@B*6l0-E*$n)U*k z_5zyr0-E*$n)ZTpekFJTO?v@N8-tB8*cgM2G1wS`jWO65gN-rR7=w*5*cgM2G1wS` zjWO65gN-rR7=w*5*cgM2G1wS`jWO65gN-rR7=w*5*cgM2G1wS`jWO65gN-rR7=w*5 z*cgM2)39+GHco4VT?tN0pO=I~*q+&)mR1`_!4se(jnmR?r+c5?Y2xkEfup|DuyI-= zvY(j&y$|QKG}*Xng!$7je_E=gUrDu`{$D}IoTu@~X*_Z|k|yPU@YnBvr<^aII*q4J zN4%DGS~0fYLrLK9bYzzFdGHnf>d5o7dbiQh-D&l1hbq<)T8ZbTF7Zy$Z7RHr&Rd28n2BpQr;nZoUd}@e3cs)Qs-1Z7bvCZwcSarI~ zKd$l4f3+fwi#H)(=*Ia%H!j|s@+9c*`{S@Q4iDqhdR!`}w@Kyvq{qH-)z^3xbbZIE z%Q$rzSDP7CiswP&s*8TBy6Ab;!uC64pP?6=p%AX!#Kv$U2h5lEIclO+Pl(sHsyAX(Z^mIx$EE6NgqWQjnsL?Brr zkSq~MHsS~*O9YZ70?87AWQjnsL?BsKM6?{#T7TwMgfnzgCz!uasI}`ETKI%oxSmu? zcFJG*4Qjo%Q`nxrPpI`e-ShVewO-qvzfY*$8a;oXVE#T4@%(*4Ezs$nzfY(I+V=c? z0&Sc?8z<1l3AHQL8ikx-{ysrlnqdAufo4w7awcdw6SSNO=I;|~8-DXY@n+B8C)75a zi|6kXY8$qHZp7CU%-<*Q^#t?x3H&=D|B3;5R=;BYJ|Um_SB@$tn7>aFT}%>POe(rq z3MS=K;}CdMwV0HDo#NxJ_9(NV;tcs4qU zm?VCf6vIw&{4h!UFd6ZDa58cm{Ab>?0d5%?Z6_IRCy5*;i5w=0943hzCKWm84MYx; zVsa&zV&s})gql*zUs8%!9;S%3rWkprP~#~g&nYx^3PqhlOQ%rLDfDv+<(xwCrqH@6 z;-x8C+7waK6zy#a9h*YIrieVJXkAk%%oN%(g{n*u7fsP}rWlu}7?-CQm!}w)r_g~Z zBG0qTIL~lJK<>H+X;ngODUnh5$6KOs5w@Bb808Hy{ey6 zJMmw=B9znEYINVvY4kLD{*`0ZH^-`Pj#b~B*wb&-PLzwYHPA zC>L?$kkjbkw|y7eUmtR6KTaRV_Sc7;Mhd6<>q8EnbK=>y*F|&U*0xvPa;*C1SoO^j zdFEL4%@Kd*SoO_`Z9ngRnq$>Br?#XNF?LSqZ^SwAX4_vMa;zHphQZOmHw+5lFb{`$ zILyOg9uD(xn1{nW9OmIL4~Ka;%)?`d~`7In2Xh9uD(xn1{nW9OmIL4~Ka;%)?J^ z=HW08hj}>6!(ko{^Kh7l!#o_$plLH`+Kf0{31-l=88KEDBBD(rWtzu4Ei>MzRjR- zGZD|2X2iD9`ZgnmZF_Dz!%SgD+}iexV}`yzgVxQUbu(z)41IqF#hXF#W>CBt6mLd~ z=Qnu9Gz0T9a6SXuGvZlqM)zjWy%}_G2Hl%M_h!(&8D>l~=-v#vSAgvTY!_g=0NVxF zF2HsHwhORbfb9Zo7ht;p+XdJzz;*$)3$R^)?E-8UV7ma@1=udYb^*2vuw8)d0&Evx zy8zn-*e<|!0k#XUU4ZQZY!_g=0NVxFF2HsHwhORbfb9Zo7ht;p+XdJzz;*$)3$R^) z?E-8UV7ma@1=udYb^*2vuw8)d0&Evxy8zn-*q)U>tOT>t2ci14(L2iKg1^_g(97~g zudrO+d|4imE#A%vJsQ3&_H4g~?Um%06>%AV0{#QI>Sx$T^fLR1US=QB%VJw^6Whkm z`bn|vC;tjN1-60hp!emztVqc?2EM}c{vV&0726oS&hWD08KGhr0x{bHI<`Qxwm_V= zKvcFsRQ4(!JWrX=Q|9xO`8;JlPnpkC=JS;KJY_ylna@+^^OX5KWj;@t&r{~}l=(bm zK2Mp?Q|9xO`8;ZTo-&`O%;zcddCGjAGM}f+=PC1f%6y(OzXtQK!Tf8?wO`Xnv=Y3g zk;r&mY`mtD+r9z5X~ajb;iK1>1HPtF#_2DDUN?SCGGC(1 zmnickjc6;u75eoR`t=q1^%eT{75eoR`t=q1^%b=lJ+C%nbicl$)?#$OzCypgLchL3 zzrI4hzCypgLchL3zrI4hzM^)e->O|1-LJ2xT^Zf4uh6frNDuvH_vnrr@EA;Ct z^y@41>nqYUJxRa5LchKuO*-6;N^z`fU+EQ?xo_?L4 zex06vot}Q3o_?L4ex06vot}Q3o_?L4ex06vot}Q3o_?L4ex06vot}Q3o_?L4ex06v zot}Q3o_?L4ex06vot}Q3p8h%vzYfE%!`tid_6F&1kp2egZ;*aN>8ap`(uH{BhCI?M z`>H&C1CQKLO-E(lApK3J>kWEdZ!jJb8#f|eeY(Nw(+$>?Zs4gK@|4~tPZ>}1+i}o6 z@rJzS^s|1ycraR}Z@|M1Ja|KFINeHeL+dlfb>86r3cn#g8h`F*@Z$~qctd{Fo8?F2 zZwQyE=`uB4rl!l(beWniQ`2Q?x=c-%)%MN>%hYt4nl4k*Woo)iO_!qKGYPw8K zm#OJ8HRYDffLk(yo7D8CYPurZYJZcO-c(I(TkUVs%eYT7;66>Ezd7Edm))e7-J}*b z>18)n3;l{-c9W9dq?g^K18+RWj87FP0DEy{e0GT)-iw1(Tae3iboN?%*0udUM8R_SZ2cz>0?wu<*x>1(U>wN?7s zDt&F0zP3smSfvfD($`k$Ype9NHEOy>P1mUD8Z}*`rfbx6jhe1e(=}?kMorhK=^8a% zqo!-rbd8#>QPVYQx<*acsOcItU8AOJ)O3xSu2Iu9YPv>E*Qn_lHC>~oYt(d&nyyjP zHEOy>P1mUD8Z}*`rfbx6jhg<9R{b+t_0MS4KciLuj8^?KTJ>$l%G+wUOTlf%%G+wU zw!L0-o3ZjXW94ne%G->Uw;3yMGgjVath~)wd7H8FHe=;&)lqLy9gQ9%Zd1qGs-11` zr@GBpd7H8FHe=;&)l2D&mA4ryZ!=cjW~_XZc;-#wnKy}N-XxxRlX&J$;+Z#zXWk^9 zd6RhNP2!n1iD%aJhE%Z5cd>Q7M>eaA>#Vo0Yc}1W6n__654^gy&Z^@&tB&h@7hC7M z*gD_E*7+{Bu9EmY-kGybi(2Qq*m~gaV(WYtTMxX(wXV|oN$<>A5B!Z|UCjGe7qR~@ zN$(#Y)peiw&)flBy)GkCAsk3!M^O}6Q4~c{6JM}o{JUJo{25;T&$S(%ABHV)93MXv7+kKX|K#Fian!O<`j7@R+Q#_ zHa{0D@?5OQbFm`N#fm%^D~fIXOKcnO@!5DTR%9l&NE<2gT&&1bgQ9B0NA~!fJQpkS zT&&1*u_AM}MXAf@ab!}YWfg;6r2VEqk-6NWROfU*`F>NN7z~hp6!gmQqSWYougod( zT&&1*u_7(B$aAq`;FUQ=o{JULW_7>BB+iAZkP*fZD zzq~T1s5WkNCl}QgdN#fm%^ zEAm{ds8-{AG{e)4qUJ{YU%x3(RBJLi;wti7tSH}5jq_Zr$aAqGv(`nmI3GF3kzSco zWCpva*5|ZmhKq6=U%yx86y-KXugod(T&&1*u_De>#CeK5D=DhY>I^(9DXQfWlm9T+-W~UDXO*ZPM7F&OZ2%V`rHzIZizm(M4wwy z3%Z;x(dU-bQk?eatR#gSJvuAV=a%SmOZ2%V`rHzIZizm(M4wxt&n?mCmgsX!^tmM| zN@t_bEz#$e=yOZ-xh4AC5`AuoKDR`lTcXb`(dU-vb4&EOCHmYY?rw?uTH;GtOZsxf zXnKk7r7Wf1uM(G19|ms$H>-BoBU|`U(!U38;n)8Q{22JhouvPS^q+!VplA4( z_)_RnY8UCtXGF?jjBlvmn3*ckmesB=Nq?KP=bzaVT<8@J>sl zy`|K@fgZCjr5v#@=}Rm|e<^e+<>-A$-^en0c4aAD1^Ru)rF0GGc@=gT7kYMuea3~W zNY}Y6zGlOo<4Sv_%~JXu;7woy*b26R?O+Gk34R3hmqM5LQs`3pKXc}fl8>&^=!%xI zL`zxXOQB2pGKv1hmqM5LmJU0fE9Y+imoJ4b@ukqEjK37Rq%UIWn)y=bQszCR{iV<) zz7)EYxtW}1a^6SUUkY8~OQB1dR?;6J-(Lz{;!B}R`XZLoA0oel^oL3NOQB1dTS(su zt^?PD8^Dd=CXhD8w}9A(UH`pAxiXYYzWkay|q8H}D?NPvMvNQmFQPPyKOPd%lBS zt6U~7D&r*D-`x2`MB3$?v{x_3cutJx#2gvpIWe9S<2f;&6YHBrmvy}PiBr}_jOWBD zYa`az`TVOrCr+7@IAu=alsSo0<|Iy;lQ?D1iBtBRIAza?@thdXiBtBRIAza?@tl~i zLdAGaoU-S{d=)Cz*N~jH=fr#!Do)vRVmv3tbK;aeCr;UO;*>onPT6x}eV5N@&x!du zag680DSJ+wvggF9G0>h9r}CgZCr~BL+jHWy*RIESPMoeKZO@6*_M8~c ziPJZbw&%onPMo&q#C)AN=Ig{UUnh>!_MA9v&x!S2KBGM+PTO;0JSWC;;rs+Rd`N}=frqUjOWC7PK@Wocut(L=frqUjOWA|drq9O z=foL%PK@Wocut(L=foL%PK@WocutJx#2I@|oU!M`8GBBQ=foL%PMopl#2I@|tgrAH z?K!c&!e^vS;W=?;3pw_jIAhO=GxnS~W6z2CB3YcFec?GVo)hCaF`g6SIWe9S^L64l zW6y~*_MDjSmBkr*PMopl#2I@|oU!M`e4RMv>%_6X!si@&POPu+8SOc-zQSj`Pxuy| z^A?`-mYif%IetIlEu7>nJm)Pu=Pf+vE!E&?I>B=iJSXAE1kXwEoCMEF@SFtCN${Km z&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF z@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCNr-b2JSQQ} zN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwEoCMEF@SFtCN${Km&q?r{1kXwE zoCMEF@SKD=C&6RedD)yWpr6YF>HNzv+7tw|9 zC9P;v>Gy+jZ>1G03O823bF8G;2)F!ang5^{u9!FO1WL6Kh3}N z6=MBMUm+Im0`(PQrS%nJp}s;a+{=;w2!0;?0{9rX9~=a~L|Mb2<}UQ#!=T;@RC)w_ z8q^zn%F%Nip}s;a{0jIC_)nl_x0J7^JVLGA5`GnY9z4ZeoCdZ2P`_%esZd`b7EW-C z)|e@+cUpz|3b9ag8p7AO+Ha9QLt0-UR{mMidjCjiJ&P1-Wxi1F9|^U3T&P(Np=LRR zniCUh#lBE0_Jx|66zbWx@MoZADV07C>WxCBFMt<8J%tHUavr0;)*{qbh=rQf7ivX^ zP;>i2t>_T0B3(y%HR&5j>np_iRbL?%>MO)TeT7)4uMi9M6=GpK*a3Ee9|6_->(|>r z#Q;j{E5t(dCNFZi8p{jOo4iP8mY#Ktlx+Nj&m%8#`jb9hUZmsYMNaE0#6e14q+k6N zVxhi5EPOX)KK!Vi$vSBRDVAnA6} zA0pjB`op9HR&X7-9^3$K1UG@)yT2EzGjAd14${9*`VUC|A?ZIN{V|YsCol59 zXm|1=r~i~AKS8>S^e0K*Mf%T3e~L7%QeNbHghPLYSm|GLs4smf{TcATf%*!ua`Y8q zp}s;Kr0qpQjk$!1e}syEgm##;y-299NC`FO655M`)NdKnn%fcH4BihO1do8HL5(1E z%ujU9fo61tT2G}M%}+W#Mp`2jrC%WZqSIQ-q+>LP=Je;3&QM~85;K&TNxQ_1R*@N9 zVn%Djj4m-li5W`FP-2D>GnAOoJm+MPp~Q^lHkGEt3?*hLaTz5pqr_#DxQr5)QQ|U6 zTtu%mr>#}N?b;X%P4UfB`%}HWt3PYKfgby@*aP}-v-x%8&a#4 zvsw35B|qOS{3!T);1<s(*t@IO=`z6jWOzDTf!=O2@l1m$(2K5~erH_GM2EPJ61O5}J_n~ymIH>opmHsOD zJZP7$QhaE%OIP92RdQ)x&jh8sO!^hlnt4|KtE9ih8D0m!4QkF=zy1sOeNay;lrssQ z1E;{Bg8xQ|)8Gtv5wz=8;ks40ZWXRuCBN0##t(cd`x^y&<)*hEi{{?tA z_}{_5*|38j&ORP%&1Ngtd$H7Bf zgPt_$SH1ftq?Xg}E2}iW?R@G&^V?4UE62dR=C^(PFTh`dzoIP7&iDnF+Xx(Bb)oVky8uU!?`<*GD)?i@Xb5?(XE8tPj-K*wBwxExEB!9tsd_`F-%VP(Q7io((%Ow$=_c@Ia+*oM zk8}&^_mgfV{Q=T#q(4Zyo%DxDcaZ)t=}ywOkiM0xS_kT@+A2|B{1$EmH-VeME#U8i ze+c4B>gjyEzPc%N3{a&Q+xRK)&p~RFUaTtPUaX2?cGM6@4RO>kWk(HDcGM6@4RO>EM-5YMO`%5R6GBJGA&#nEkbFC8h@*x$ zYKWtTIBJNahB#`d*x2RTQ9~RxRBY_D9W~U5+ojl1LyfqNcGOTKZlfJF#8E?yxP9a? z(2g1^?lsy`LyfqNZfhZq8Y=E}+Kw7(#BH>rhB#`7qlP$Yh@*x$YM8R4hKhS#t{pYR zQA3TjeFi&fsPVPYtvJL{L&djF+fhRtHB@}-wA*#4_||Ag4K^BW0Z@ZAT4p)DTAvanuk;4RO>EM-6e*5JwGh)DTAvanuk;4Yjk7 zY5_+Lanuk;4RO>EM-6e*5JwGh)G%#F4fT~#qa8KWH$^9fcGM6@4gDQarR}I;+Kw9H zsA1ZU8tOZuMmuVlwxfn=J8FodhG{!$n6{&aX*+7@XZJ!oYKWtTIBJNahB#`7qlP$Y zs3(R#(vBM9sA1ZU8tR$2%d(?}IBKX_RkZ@mV+nE85JwGh)DTAvanuk;4RO>ku%m{7 z9W@N>s3DFT26ogCM-6e*5JwI5Y|;6s6h{ql)DTAvanuk;4RO>EM-6e*5JwGh)DTAv zanuk;4RO>EM-6e*5JwGh)DTAvanw-HD0K~bMrpL8hB#`d@rCXJM-6e*5JwF)*Wr9S zYN)vmr|qbr#uv`9qlOw^IBiD_HP_*^9W~VW!f88dsPTo((T*D8s3DFTYOcdMcGOTK3!@!1)XatvU&2vC95uvILmV~4QA3Rme54&U z#8E>WHN;Uv95uvILmV~4Q9~Rx#8JbH9X0gcuR(RnRi}I})hYK5)tVFVG5-jD9@I((? zJa2$M1J8pOj2agkwE|PP3S14kU#M18Z+yScpVr*C@PnY9!71&zlJ`9Zs*q?(tiu?<~#>E<_Ug1LfUf_)mn{X)OV1C zT5BQvdgW6>J9D*07XEdb^Zfe0mPp57VhmEC`_^iWrgePqf4fAjU2*zBpDpMmy^~{d z;4X6dzIi6{$)*CS{QQuG!zCiwqmxjVh{qGP=JLg=Ww+G{X`p3SJ%NJ`hEk(AT7gLi;` z0R9p9G4SKypMakLJ^xUx`90&OLD=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucueMC=i1&dt~0*drqL zh=@HRVvmT}BO>;Qh&>`=kBHbKBKC-gJtAU{h}a_{_K1i*B4Uq-*drqLh=@HRVvmT} zBO>;Qh&>`=kBHbKBKC-gJtAU{h}a_{_K1i*B4Uq-*drqLh=@HRVvmT}BO>;Qh&>`= zkBHbKBKC-gJtAU{h}a_{_K1i*B4Uq-*drqLh=@HRVvmT}BO>;Qh&>`=5ACI6oe+CO z#2yi`M?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq z5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucue zMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucueMC=g}dql(@ z5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-r zM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg z5fOVt#2yi`M?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi` zM?~xq5qm_$9ucueMC=g}dql(@5wS-^>=6-rM8qBuu}4Jg5fOVt#2yi`M?~xq5qm_$ z9ucueme?ap?2#q*$P#;Gi9NE!9$8|KEU`zH*dt5qktO!X>PhHekkyk=qhpV(o`f15 zdt_6NJ+djs9@&&*k8H}ZM>gfyBdezXKE|;}Rx|%b#~xW?kE~|zop$VzO}UTG5_@Ec zJ+j0e*|cMitY#FoBL%TXme?ap?2#q*$fg~8WQjep#2#5g%)Bb#>Yk=4AV%XRFL)$FCyjykVvj7bM^>v9?2*kl_Q-06-{{yQn{n)sCHBY?dt^0-?;OV-Sz?bY zu}3!J*dv>9?2*kl_Q+-&dt@_?J+c|c9@&gzkE~{rwbP08Fe%)oF=}z@cK1TbY2>U?ohoZFhLlL^(?^NGp{2cfX;Q!CB z|BLkJNozk89kU;Nocux3Lq^?~u2c7A)Vjf-OK%O_FVt#Yp`Vs^$wQ3V&raw#ze`SH z^eCoF9x^Ii4|@F4#WT$=d5DkkGtDmVXD9SC%`SO}(a$uy@QN;;7ePx`ue#@8jU(690eqo3S$$t#S0TGxeFbm0|U@&R2HKG1~^bn%p}E3H+{%Gau9 zVPd2`b_JpDCGbpR7thzacs|u7ed^58r_oQNx};B|pF?%=1gcB=blOjyx};B|pEPwz zpGK>$3)OX@x-L}rNxz*Dd{R6MRk~5{n+JDEU86!jSGr5;niTpxcPXkdYL$-A+P*9O zS1Ob^$SH$w8G~D#AAAJ-H2CMn%xC>;=I=@WgYa&Z_!;3RK$mzoCElHKiFc=5 z;@v5ic(+P4HiItlZmn%Jy2QIxqVXf(r@=orQsUhz(dmB>-UGw;!0h;wFXqiiJ=s28GAKQSdnU9KVi{_A{4z(=U*I3H&1=3uJzpJ2p zx2Ag)%Ng~J0^tuxYYm~&Q{YcQKP$gCc#~rmz(sOOU>SVN=ssA;;OwLb0yTpB}apkMVjSqr5#om4DPmM=8#g zpL$8-OB_R4V$#RIWmJDRD0~~Z#z*pua;vU+cd%90Ec81;LeEQVP5)G9-s*RGgnCO? z=s01k-!cof>Y8=DuG#3mW2@hV5qfrXYw#%eBYjb8-!c4Z>}zk^6=2*S1MTgTf=A=aIH?&D*3U=f4bEOWU}MZK@-sRXaLTwPU=G zoCkfR;#zS-E8$$&L3(Qo_--$vS;Y*Rbc8PMu>nAr|9 z+cj3547O{OYMcVC+wJIfyGE?e_Y;ck=ytnCug>`;Xbo?NrR}h^U87O`ijuc84&APC zsB^69?WlUY#-vW~0r!H|`F4#=jn?^gjZdBaC(tu#+ogHuJP%s!+r^km{|0EaZ}-<92Du_;zwUd$wI;)ybe6 z_PSxO8(npyt8T^!-RPnlPA=H=&BoCb)&0pbk&Wny3tiPy6Q$(-RPOogM=&A=@^`NUBbk&2ddeBvm<~k;W9{jThUG<==9(2`% zu6pp&9(2`%u6o4Vp#EiD^`NUBT(k#W^`NUB&3^dI)>V&YJdD;=54!3>S3T&e2VM1` zs~&XKgRXkeRS&xA!BKnA)nAL@%fVlZ+snbz@HlB#zyzQ4=O^?k@V>gDmHN1J^Mpa$Yr5p;D_iX zACfAZ{we5Q@*%0hITyg|Mk&GQX!)VwNgt!ybb1_g5BQMk&N*KLzX7_}dq}nBeD`_} zsg9i1dsxC4OpNq*57FN}q&jkr-op~E752h^FZ}nay(@?4u~)6$>8Ew(UZTfdvFh}3 z(9vVB792#19((;&E}^5xUe$up(PJ-l-Ai5f5MlHhR%UFVSPKT*AL{B}9+CM322hkG({Xy+n__s%4+k z{X(zi0F90wdx;)<14oa&fuqM>f0avE1|2>25UNqTD^w>-E*h}=-OZ3<) zh3E?iC}al;*?~fKppYFXWCwB74ivHjh3t@5=wB#g2MXDNLUy2#9Vlc+V1?{JAv;jW z4z+Io%L>_nLUy2#9Vlc63fX}|cBmEWNEEUIh3r5fJ5b0D6ylvFcL&~CQmE+Yvha|c zWT#Ydzi^cF82D9w)%%Rf_X^vc>2HzN*Ibo$%i1XoIPD&JC(gMOx7?|_c8>eso&K7u z(7o_Z%^~}2SNWH|<{EfkOI?YSV|0(aQ&E|Yk&1LZQjyND2+cV=_;nX)_scsqM9T!pWa zevP!}33p0$zA8sJJDG*vDb@LEe+t@lcPb9_neDwh6%9IVzuKu;DW~njJL$7_GXK02 z@7>A#^G+Oir?jWCq&=0TC{h2yhj-$@JEcSadZT`Qm{$KVt^Q#g@?jkEVI1;d+UCQw z&4=;EhjGP+alD7|x*V#=p^6-;$f1fHs>q>=ocv)h$SIb-EVL?es3M0daw>OJIaWmu zRpd}b4prn(MGjTuP(=<^Ci9ID8niX5uQp^6-;$f1fHs>q>=9ID8niX5uQp^6-; z$f1fHs>q>=9ID8nibqhzBdFpLRPhL^cm!2Ef+`+C6_22bM^MEhsNxY+v5Pb8;tabu z!!FLSi!!U~Oqetsg z#Oq_+qxI?9jPB9;bZtVet&eN#qetu06*}MZA${~{ee`I3^k{wbXnpi(ee`I3fqS$* zdbB=zv_5*YK6!U~O6T>Qn9<7fatxs(0J3jPid+5>j(4+04N83Y> zwuc^V4?Wr*dbBnQAj@u=|>^`D5M{S^rMh|6w;4E`cX(f z3h757{V1d#h4iD4eiYJ=Li$liKMLtbA^j+%ABFUzkbV@>k3#xUNIwecM^`D5M{S^rMh|6w;4E`cX(f3h5{2=|>^`D5M{S^rMh|6w;4E z`cX(f3h757{V1d#h4iD4eiYJ=Li$liKMLtbA^j+1FACX-ppXF+GJrw`P{;rZ89*TeC}aSI44{w!6f%H922jWV z3K>8l11Mwwg$$q&cA5^@X8l11Mwwg$$sO0TeQT zLIzOC016pEApppXF+GJrw`P{;rZ89*Te zC}aSI44{w!6f%H922jWV3VD?F_$cl1Q9S=qaWWY^iswH{t9g`G^C+JGD4zc)p8qJG zzmHkFeazbJOP|tz_c2qkkN9C9vv&KKwcDqDU%#ryH+t4?pL%(tXYKZ>Pd9qjZXf;l zKKk)}^yB;J!S_jB{&g1gtld8K#YWF3>|@q$AG3D*q$}tA26%(;^Zp`w@Ogg`J@`Do zex6^yKpXi2ZR86m{|hMJJ8_Q&-icc%9Zm|5fSxOUOo}qTOwLb0&+I*>GbmqYFnX@| zF==K(=(*y@q!SV;J|LVEo$D|hLya;-(_%Uh5=(*y@RM$e)@1W3g z#gC~@b-dcnq#`8G74O$I3u*8B)!qk{_FVCP+WUUh%c#^FI}_IbH)2LzhU$^Xuq!6`JOA@uevjO_H4i6E~Cdp`&EO^ z_o#V);1S1uxrEQ)d9(d;38UwV_u~@#af$t^FP&NSW%P{MESZkC&>=ydk9+xLL z?UC~1as#J58hu>a_OCw#uNu7vkT45wBWFA4r>l?Cx*wkvq@#jJO zc@X9YVSW&Q9>kvq@#i5q#$YhyFDVH<>KW3W^DRQp5)7#>MukVn@%s58)rfPf_90wi z2$vZ0H_(*hvFea^ByjpH>2HIsuOW?4{I7rJ%>M#@k6*tJ{s45H4yAuYdJ_Cs{&kM@ zk3r8S4W-`z|BdtfjC_6lO!?1!ObKzb1@8H2!Q3p|%T6f6U){V%zz@gAQo_#YhUCmln9pT-WUClZJ9ULVs# z&foCs-;wsS{vq6TNMkFX!5%xLv6a(y+98dtoVMQ%X>8@RU3UoA9n#p!IexM~B~iQ1I^{^{8)}`3&w;hBVgmnccGtX{_h8`rM zFPIstoKJfhQmgl`?lp$g_MP^#@*#ShA$pu4xq)-+21ELSna|)JYDi;4=dUp{8X-FU zPS9R)K<#cq==skBax)c>Dk(@dJ#(4>0aNz$p6wNVV!@BBR!@&NDq5ZJ*@v*0AC>AJ?ue6Wj@2#NV}gsNYrtV-u9pr|7r_K}^E_^-4Q- z^8WP`Lf^G_u^$!suG!08_&-y>D||>E&c60Sw|Dln7rKqJuf5PQ)f4c*?)FN%B|ZTg zPpEfr+C8;*x;MV!a_O(1P`h*5z4jAgz`we6uUNnM-MKLf9T zo(*_XYBYL&^+{>cm<1gZJ_-L%N}108P2p3-z)ukaKSjj*6cO)JMEg$>?LS3S{}fUE zQ)u8RYX3{#5g-_*?;EBzhw0;nsm)<(bC}v3rZ$JE&0(VAVQO=j+8oBihpEkBe0!MM z9LB4Msm)<(bC@`JnA#ksHixOrVQO=j+8m}fhpEkBYIB&{9Hushsm)UjBtLQ5wRuQ> zVsvdDB0f1pZ62aF4^f+kF5Of4Ly z77jBWIm{UFFivt9{tq*zI}G!OVg4}8ABOqEFn<{455xIkI6urd?l6vVn9yA9ER<~uzgs5;+(|DnB_2Imc!i9VeaTK{2%rnPr(s<{s<0# z1cyI@!yn;Zj)?zB9pf4MBh0=Y!OxH2=ST4KBl!6d@$X|!fSyG^!d)EU`j4QNBk1G^ zSAGPaKZ4I6!RL?Q^GCSyBe?w$-2MnYe*~W&f&UTsAA$c7_#c7)5w3Xz{zu?{1pY_h ze+2$V;C}@EN8o=1{zu?{1pY_3@)7tS;rd75e+2$V;D3a>7=iy0_#c7)5%?eBE=J&g z1pY_he+2$V;C}@E*~>m)7ki<5*r(zDY3_wx?3H8w*`Z$O{`6`1e;WSTcV0Q>|7rMt zn*Q`@?t(q#mH$nCwd+33m9ta4(pSjw^N6S6|7otA9pMA^f){!%!PD@66#kFG|55lq z3jasp|0vgd6#kFG|55lq3jasp|0w()h5w`Qe-!?Y!v9hDKgyLKh5w`Qe-!?Y!v9hD zKgwMkh5w`Qe-!?Y!v9h3;wbzdh5w`Qe-!?Y!v9hDKZgE~q5os>e+>SQaWBWv|1tPK zhW?Mi|1tPK2LH#<|1tPK2LH$4pS|V-c9|EN|6}N%{pFQ*oO2BRkD>o#@Xs#u!7=oI z4E-O2|6}m~WqN@xGtcm4?&!Q*n%W{J)ZKO??#WOyyv^q9#47CcjtIK#Xj#skEht@UFh+Y_jxyZJmnqU zjUG=ullFMZd%OF;9#46PcjtIKNl=pV`uO3f%Z+BxaIUY~3pS#fGDfV+0 zdOXE`?m~~J*w0<)h|4>WJf30?cOmu2c#7TImE-XgySEEH zo?`cQp~q9~-Y)cb%6qk|M8;F>)vk24&&+trd$sF$##7#_-D$^i-mBf{@s#&!_jx>? zVy||g$5YQRp7LJpPJ2A%z1jzZQQF-o?QWEIH_E7LlxSy^QPn6hUXIT)4NjgDPM zrB$OxRr+3zu0dbE0j)#5Me6gT!%-rlQN~%L#6^0B=Ko4XM#n{?(u~n@(Wq+H=yBGl z7RG^GCt@d6%XGp^cQTN)i_K4Qbg(_$9y)$ zqE6?@FMuzAFOvTfXYe@dS@jw|o1>;@rOyeWz4uw^(`omB&#DLUF^-^~Re#~M~Yp{9S=Oid7QrQIM;uiD?iRPALnY1bDhU^g*v~k&FC4+ z=Tr-m!Xu!^xz90s{2Zf<=NM%?$Ncbf;#0pe;&_e`$8*dHKgYP^ImR8&G3$GRKIH^` z$_Zx4PUwEMp9k}YC(@qjI-z@aj^__gFn@T0-sc3p&k5!aPw0O2tM1omKRKa0b=sq? z6S`BQ9pi-V(P_8(6U-l;VE*s~^M@yN@A{SbkQ21u6XL-+UiEZBJX{V=5}%x;=Q>Hx zb&~kxBz1HWuRe(bpCl$ZNlbE*nB*ie$w{2{Br(ZJVv>{8$VqDCB#w6yuRBSNoFoD{ zNd$6|2;?MnbduQPB(cXy{NyBla+26%O#ZN2GgemDnEXL$u6#^A@}SaQfitGQ*y%CQ zIvL}R#+ch2(|zf`>V2M7xppV2fZS9O#b5|e?)o`)cy|2 z@yzp>dSRp2v5e7j$5i7kOZz(rUGHP+k$sG3ILFi@8@0cK(5-t+{j$@SK=;dI>X)6P z{T+nA;5?Vf`6cOJaXnYTdGZ&)>zr+objc_`)cNIy#$}*a4UNeUjraI$>X&__`{gm( z;Fx-6=Xf2_nB3Aw_K@>8;NO7{f$p8h zPhqb9g*5t+=ADmb)NA`+=tRA?)7sxb==M9tEa;e?!l=g8cl%$z0zG0KQ@`UQJr_Er z-p6Ur{EVp&a@upDV{!mrzu$x!lLHvtn~!;a2VnqK`AFPgOf63TRsUtQ1COZ}Gp^)F zKi?TsZ*E-W`||z{LeDIXsgLuKcK9*%bWVF!)tLIb-N87$`8d7#IKBBez4a-80LoZft#-h7-ZH85FZh=u|2&a@ zUi|xPzv2vz{PRTqc_RNjk$;}ZKTqVJSB>lr^7u(!HKOB*^Yi#go;W{GoS!Go&lBh8 ziSzTs`FX|px)OSsyz0?s@H}c>wdu6oBdp@bQl7^EgIcI`Mhz7MuV@aMF^$m%R)ycUsWp>N+HUZLX2Js z_Em8uR4GQUo+{9$3bd&LZK^<`BHdUZa6=+ih+Ejry zRiI53Xj28+)bq5d=V?>V)25!MO+8PWdY(4*JZmF4Q#=Pbg?>(m6aJ8Q>`F;~;0>JlqjTyEI;YXkbG3?}bPn{2sR?RaQL4{OU8{dn zk0AF2y<%#D+Mm$uw9jBZCp6FCv{{|de1g;Fc7k#11mo5T#;p^YVeqf!c0!|UrD0$~ zV{NBB%QV4=djciAta~2}Ue>(}xx1G&{+d+U_w}+y*+Siye${;$t=N~j@|OdT6JORS zz-Yz3tm`o@fw57gj|x5Ze3=qo5v!BIE6f$V!d$^CV#7IpKkF6oAk>u`-zNMfwf0SF z?VHrvH>tH(InS${=T*-0D(88X^SsJ=UgbQma-P>X&ug6LHO})I=Q%@5KSLWoLmNM% zHa;1g;VHuz)w0sG?lU}PI77QWL%TjhyFNp^K0~`cL%Tjhi#|h(KEqRnGpa|Q=j)*7 zi_S1II>VUg3{M%(s7{^lG0Pd+@)_Fl8P%zC5+fu1GmP}lP_t*K(=)X0Gx*`_YTc8; z>uTLbKjnE{t=s5(d0nmB=%+ldt92Xwl;?G|ZsQ)%@3XwF)@}4tw%66VjlPT5r9-2= z=yhD^b*}t%wRGoP0sWNcb+vS(ul#kjbYm9uQ=Zq=x+jCPw7#>nzO!n%p9#)VvuCM= zv$VdmQs#v6ef?*pOr>dSXK8C^HSWHw9Jjc$(u0l(9wsM8`VrEPg2(u;^>$Vo_IbRT z;;fYHGk8tKS?SqnKYch$8$8QhpQR0+<=)TY#%E#REN*-j9?sG>&%(x8TH;ym{Velc zXH{Q1C$nB>RclVK6@Huh`ZlF}oAZC0Gklx>eg`-E4sP}xYWzFY_;=CschU2A(eroF z^Y=LZdmR5gj{hFVf1l&O&+*^q`0sQ4k2wBE9RDMZ{}IPea{MI6>zkwEWRm00DgXZ9 zobrWo%R!;%6V9pDoa450PPOJ7&j6gmRnBpb=WvyCI-8Ev*^Kx3c-5VbRNajVbKqm- z4}l|~=V{O3Kj+la{a^Q$=Tw8ch5mlvIn6Hm7_LEe=d=}jPIc$Bb$gC>caC;9pNoT6HlYbpJceI@@Xde_A!-V_pS4 zI-5?r=ba{!oFG(FTbJ=8R7ai@c)d{{Oe1k-D^w-XTa}(9s^F(YfLMW_pkQ(X+`fwui%|#rTsK3?Wb93Kg~+} zX;#`#tG;v$t9++fP2*0}in{%)$C%TqFXKDO@p$t*wR4`@InUhhc_~);iX4od zvpp~MI_pXLk=cP>Nd#?U`;Hcodbm+8Wp7YY4(es4or8lQ9kuH*6 z0%Oq8&UxnQ&oeuBUaE7B=jzW(X_tc;6f%QCW>Cls3YkG6Gbm(6Cls3YkG6Gbm&Rh0LIk8RCi=6f&dHpYDPY%?t{eK_N3JWCn%IppY39GJ`^9 zP{<4lnL!~lC}akO%%G4N6f%QCW>Cls3YkG6Gbm(+(bEMKash>0Kp_`U$ORN~0fk&Z zAs0}{1r%}tg0Kp_`U$ORN~fvETbQSk+$;tTSn z%fST{ash>0Kp_`U$ORN~kvQ-oao|Pbz>7HZMQZsXZhVnA@FKN#kvQ;TuuE)TBo4et z9C(p9@FH>GMdHAV#DN#7sf)PlMe6G!?s^e-y@o%0g+a)~(b5^>-q;=oJ9ftQE_ zFA)b`(kM^I69--*4!lGhc!|5X#Pwea90y(^{<*}JUm^~?L>zcYBR>D?IPelzeu+5n z5^>-qjq;RF9QY{t66+t79W_!2WHXLEIu%c56t2Nv-rR)J}`?9%;E#H_`obaFpKJD@qt-< zU>4?QVSW}Ln8gQX@qt-;0iu)1s}MA4_u+{u26SZ z@PRA%z!iMp3O;ZJAGm@KT)_vf-~(6ifh+jH6@1_dK5zvexPlK{!3VD316S~YEBL?_ zd|(cR%%PAu6f%cG=1|BS3YkM8b0}mEh0LLlITSL7LgrA&91593A#*5X4u#C2kU11G zheGC1$Q%lpLm_i0WDbSQp^!NgGKWIuP{sjautPKMIl#F$W;__6@^?yAy-kzRTOd+gC}bXm%%hNb6f%!O=26Hz3YkYC^C)B<$*C5TPQ^%R;ZsSd=R67mku113fpjnD&=X78Q|B2){+zYaJJf@fM{4r#<7h znD$6;G3`iiQFm?p1?cbLEE4Z6^5v67X~zHZmroX@99@Z&W4y=5E7nzsQjxAlD$0Z z`NLpP(m3U^(5fh*iV~_QsoYWJ_{=3#Q9>0ZR8c||B~(#D6(zohQ$iIbR8c||B~(#D z6(v+rLKP)cQ9>0ZR8c||B~(#D6(vRxB~(#D6(v+rLKP)cQ9>0ZR8c||B~(#D6(v+r zLKP)cQ9>0ZR8c||B~(#D6(v+rLKP)cQ9>0ZR8c||B~(#D6(v+rLKP)cQ9>0ZR8c|| zB~(#D6(v+rLKP)cQ9>0ZR8c||B~(#D6(v+rLKRD>VhL3&p^7C`v4kp?P{k6eSV9#` zsA36KETM`rswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1 zGO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-B zD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$} ziZZGwqlz-BD5Hupswkt1GO8$}iZZGwqlz-BD5Hupswkt1GO8$}iZZGwqly?+#Hb=h z6)~!aQALa@VpI{MiWpVIs3Jxc-uHQTP+?W4cYjuz8H@_rsGyAs+Nhw73NsrOX=74H z`i=F96f!D2D?h2Qs_IURh^ZzSLjuw zDF4f=IxAWSVze7q)EB!Huj;HwY0mKsVI}PqI~A$U=vAE+R&`d?NBc;x>a3)_sqDIOs?G|lIxDQ|tgx!n zJ7w!%=(!?2>ujv*tT5YCVO3{^Rh<{qLc~(x{fkQA$f3fj z&Wd6f-LKY@ILA>$CGe`widvA*=2e{)wIHXxsn zK7&_vRsuiMsW4|%QCssFysERJw&t{FYb&hktkCW%(yh7js?Lg5p%{M%q8VCZg_c;M zC05iDeIC#BR#??pVO3{^Rh<=9byk=etEip&$T^Pms?G|tWEHhjr~Tx*qS(y$;#Hj$ z#b!pY>a1uLiqWe&E5vCP;3=1ycQlmq2B?)7N^2#C zQ157DQeM?5)H@o&WuV^CP+F_eg!lMJ>C;E*O=O|gYzVbxL#Q zM?{8#>^m7hxM%`c(e{1R&Qpiqt^)cQ}M97(A4pTZeX>pzv& z`cI*}NT@fzgumdwTK}oE-WU?<%`f4vNNZK0((|PC=9kh7r1j>P(t7hNlc6><)Mkd- z%*c!MFKRQR+SJ*+dQEt*%k}Ct;Wl%qTK17WthFQJ@AD9;h<%`c%=gbMW~4WZur66(z_;gcNmB~WjEDdz~NFKH;P zH@}2mAxCROmDU4rs8ypvjRJ%k1qd|? z5NZ@4l-mf=hTO(y(@J2W-ux1x2fK~ZXh3db-n4>Ls5ifadh<&tw-Nq3NIiO0n{qS* zFVve~LivnPBPO9%iVF4Smry<xFmmo$WtkC&@Bt@WJ3mHcW? z$jDWkvx;B!=9khpkpFh_^(77E{3dCw9aUOyer1-a-AxEKXlC>u@;=T&`Zv=@&t*wNqMam4$kf zOZZLlwboAQ*GOxWt+Z9K96c;Y3CmUc%BMD$YmBd7sk`Os3nnw(xB9Zs-d?4;FxuOz zbVo)ze3fcMhdD%2BFp*`F?M;qRI(86+LAF}{#<>iV62MS2b$O9+2Jj>gVPo9z&`L)Z>IQ>2{4sFr11 z0lGDX+))Vsp`U_fs^PyH{;T1?8veZ-rhhg6)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p z|JCqc4gb~fUk(4&@Lvu8)$m^p|JCsCohT zv+!x@aD{qLqaAgHW(e;W>I*Q!m%y)sFLV4q>&z?EcKoY*w-wag3bi2RXzokr*W8zJ z8##aNV^pX9RjU?-TD2&A0<`C^&Rf6`C{j@$Su6 zsNRjP_Z6ylr(N$Wf-|J;6fjFE-Iti~^snJi3t zFEgjjWLDz~rQtIRpIQ1x?>nYn;U^0l-dW5!X283N8GYB@LCokrD64qYsP&V=81x-w zxtA<=!9HTjQ7kI-HP>*>HC%HInyEoEHE5;=&D5Zo8Z=XbW@^w(joP)&pjqWnp*2&( z{nl`&HQZ?pcUr?e)^LwCXr?BxW@^w(4VtMzGc{4;{2F=u< znHn@xgOk*tnHqSmK{GY5U4v$7&`b@QsX;R}Xr>1KSHk~F_+JT!E8%b@npp{xD`9da zOs+&TE8%k`e6ED6m9VrDepbT9N_bca11q`rmE848?sp~kwGz#&L^CVV%u4QPCHJzD zyI85~*Z1$x%u25LZS=Np^Qynh+qk>8abLfod%2wX4c&`SS7_7u zR*S}J(O4}St3_kAXsi~E)uORlG*$~gweV95Gqo^N3p2HFQVS=wXsi~E)uORlG**ko zYSCCNyw#$yTG*>aW3_Nti^givSS=c>h1FU#RtvYaXsi~7YtdLOJlCSJTG*~dW3_Nz zi^givSS=c>MPs$pMJ*buMPs#StQL*cQX{o!td@GIMPs$pPAwX%r50+@SS@u?i^giH zuT}8B3jSBY;VL*>g~nFF;?b!esz&D5cpIy6&d;IbnyEuGb!esz&D6m|9h#|w zjXE?_2PbuCrVh>2p_w{ZszWn%a8-w9>R_x6&D6nL9h#|wy*e~g2ZwcNrVh>2p_w`~ zQwO(oXr>O$)S;O=G*bt|b!eszp6k#|9c8K zXl6BSb<_LX3_cZ}9A>&||0@ zRO32EwQS6RPjJi_sCNpKuXhTBo?*B_b!0q8j-&A#R3pZV&KKLpQ22JSXY}~x?PBk; z&_}*qycxBoG4pnDrC-IB@kw${gRg^^z#^#iiaJK?6*F%a1IB95(a77WyEQ6tRNwgU zIB|{Ii{8^vdogDX+ci?G&aB#>%&bMRYf{=AN7R9bb zv1?K6S`@n$#jZuMYf{=AN7R9bbv1?K6JGh>A zaOQV#=67(;ckthL($Bt=e)gTT)^}3ZH|kC=XKvJ;3U&QP_p>)C|9+unAcZ%JlbcfS z2es3v(jO*$3#gq&m7|?Th3ml$n$x(+JB+ zDRmb74)_N6Gw?iUb={P;m3;y2)|L=nTcfo%>{MW;OJ^a_hf4z5l&D6txy?1(5+WgnUe?9!yr_6sn{MW;O zeaigTd#6{S`LBondhhhAwE3@x|9beZhyVJN`L9oz|N4~quTPo(`jq*vhyQx`uZRD7 z@ARsC^Is4D_1@`KY4cwX|Mh9}U!OMr_3&R0|Ml=+5C8S>Ul0HF@Lv!A^%?VD@10(S z=D$8;{_8X5zdmFB>oexR-aEYt&3}Ey{MTp9e?9!yd#6{W&HuaM|K0HaZuoyU{5QaV z1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@e*^qCz<&e$ zH^6@b{5QaV1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@ ze*^qCz<&e$H^6@b{5QaV1N=9@e*^qCz<&e$H^6@b{5QaV1N=9@e*^r#2map!|L=kS z_rQN6{5QgXBm6hQe40y!+$gUH^YB3{5QjYGyFHhe>40y!+$gUH^YB3 z{5QjYGyFHhe>40y!+$gUH^YB3{5QjYGyFHhe>40y!+$gUH^YB3{5QjYGyFHhe>40y z!+$gUH^YB3{5QjYGyFHhe>40y!+$gUH^YB3{5QjYGyFHhe>40y!+$gUH^YB3{5QjY zGyFHhe>42Q5B}c=|L=qU_rZS){I|e=3;eghe+&G#z<&$;x4?f3{I|e=3;eghe+&G# zz<&$;x4?f3{I|e=3;eghe+&G#z<&$;x4?f3{I|e=3;eghe+&G#z<&$;x4?f3{I|e= z3;eghe+&G#z<&$;x4?f3{I|e=3;eghe+&G#z<&$;x4?f3{I|e=3;eghe+&G#z<&$; zx4?f3{I|e=3;egh|NG(p{qX;O_@e=GdA!hb9Lx59rb{I|k? zEBv>@e=GdA!hb9Lx59rb{I|k?EBv>@e=GdA!hb9Lx59rb{I|k?EBv>@e=GdA!hb9L zx59rb{I|k?EBv>@e=GdA!hb9Lx59rb{I|k?EBv>@e=GdA!hb9Lx59rb{I|k?EBv>@ ze=GdA!hb9Lx59rb{I|k?EBt=|{yzZ!AAtW4z<(S3x50lK{I|h>8~nGye;fR_!G9b4 zx50lK{I|h>8~nGye;fR_!G9b4x50lK{I|h>8~nGye;fR_!G9b4x50lK{I|h>8~nGy ze;fR_!G9b4x50lK{I|h>8~nGye;fR_!G9b4x50lK{I|h>8~nGye;fR_!G9b4x50lK z{I|h>8~nGye;fR_!G9b4x50lK{I|jX2jTyN@c%*h{~-Lg!+$&cx5Ixs{I|n@JN&o9 ze>?oQ!+$&cx5Ixs{I|n@JN&o9e>?oQ!+$&cx5Ixs{I|n@JN&o9e>?oQ!+$&cx5Ixs z{I|n@JN&o9e>?oQ!+$&cx5Ixs{I|n@JN&o9e>?oQ!+$&cx5Ixs{I|n@JN&o9e>?oQ z!+$&cx5Ixs{I|n@JN&o9e>?oQ!+$&cx5Ixs{C^1kKLr0Dg8vV}e+T?`z<&q)cffxK z{CB{A2mE)ye+T?`z<&q)cffxK{CB{A2mE)ye+T?`z<&q)cffxK{CB{A2mE)ye+T?` zz<&q)cffxK{CB{A2mE)ye+T?`z<&q)cffxK{CB{A2mE)ye+T?`z<&q)cffxK{CB{A z2mE)ye+T?`z<&q)cffxK{CB{A2mE)ye+T?`z<&q)cfkLL;s3+%|6%z5F#LDIe<%ER z!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|Hcfx-s{CC2C zC;WH9e<%ER!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|H zcfx-s{CC2CC;WH9e<%ER!ha|Hcfx-s{CC2CC;WH9e<%ER!ha|H-va-)!2d1qe+&G7 zB-NJspP5_v^;UkpHRX}@t*N^}kFRe{eG2@v=8JAkc`okO^lyP1oRhu{+z6J*_x#(f zlyWPj+?x5Ua(;`l)=}0v%34QR>nLko%4MyitaT}uwT`mZQP#S&%UVZS>(VZ3UD{=> zOS`Ofl(mks)=}1PQ`UOQT2EQ)DQi7tt*5N@l(n9+)>GDc%34oZ>nUqJWv!>I^^~=q zver}9ddm78%Gy9#8z^f7Wo@9W4V1NkvNllG2Flt%SsN&817&TXtPPa4fwDGG)&|Pj zKv};_S+`NvZIpEzW!*+uw^7z@lyw_r-9}lrQPypgbsJ^fMp?H})@_t^8)e-_S+`Nv zf1s?5l(mtvHd59`%GyX-8!2leWo@Lajg+;KvNlrIM#|bqSsN*9BV}!*tc{fQA1P}S zWo@FYO_a5XvNloHCd%4GS(_+p6J>3ptWA`)iLy3P)+Wl@L|L0CYZGPtC(7DPS(_HP8~a6>J0B!49w!-0JhouZ;TMpzw3L@-5WP7HVe;wX=oV*+T7Xp?0=V zJ6ouoE!55yYG(_zvxVB(LhWp!cD7JETd18a)Xp8$&K=aw9n{Vp)Xp8$&K=aw9n{Vp z>T51%?x1$=NV#_Ipmy${cJ4^IcJ4^IcJ4_1pX$ClJdWaie`jWO>MpopgU#6(3@-AX ziY0+5sxH#`ET7LdLKZqnC+XzVt@h^RMsoq1W@LH?gH16#p(HqfLkAODfIuJ=QvzQg zgbsl~exG@F?j#_|H&34D`^V3I^qJ3=nRoX6%)GlZJ9np|Q%Cn2b-s#DouQ&rXQ=4Z zAv$%4P936Chv?KHI(3Ln9aGV%Lv-qxicTF<(Wygp>JXheM5hkXsY7(?5S=JgoKM5i9nsYi6`5uJKOrykL%M|Av%jvvwS zBRYOW$B*dv5gk9G<41J-h>jo8@gq8ZM8}Wl_z@jHqT@$&{D_Vp(eWcXeniKQ==c#G zKceGDbo_{pAJOq6I(|gQkLdUj9Y3PuM|Av%jvvwSBRYOW$B*dv5gk9G<41J-h>jo8 z@gq8ZM8}Wl_z@jHqT@$&{D_Vp(eWcXenck#-U8q)0Nw)NEdbsE;4J{&0^ltG-U8q) z0Nw)NEdbsE;4J{&0^ltG-U8q)0Nw)NEdbsE;4J{&0^ltG-U8q)0Nw)NEdbsE;4J{& z0^ltG-U8q)0Nw)NEdbsE;4J{&0^ltG-U8q)0Nw)NEdbsE;4J{&0^ltG-U8q)0Nw)N ztpU6>fVT$l)&Slbz*_@&YXENz;H?3?HGsDU@YVp{8o*lvcxwP}4dAT-yfuKg2JqGZ z-WtGL19)oyZw=tB0lYPUw+8Um0NxtFTLXA&0B;T8tpU6>fVT$l)&Slbz*_@&YXENz z;H?3?HGsDU@YVp{8o*lvcxwP}4dAT-yfuKg2JqGZ-h$vQ2;PF=EePI%;4KK=g5WI( z-h$vQ2;PF=EePI%;4KK=g5WI(-h$vQ2;PF=EePI%;4KK=g5WI(-h$vQ2;PF=EePI% z;4KK=g5WI(-h$vQ2;PF=EePI%;4KK=g5WI(-h$vQ2;PF=EePI%;4KK=g5WI(-h$vQ z2;PF=EePI1;4K8+Lf|a~-a_Cl1l~g6Ed<^|;4K8+Lf|a~-a_Cl1l~g6Ed<^|;4K8+ zLf|a~-a_Cl1l~g6Ed<^|;4K8+Lf|a~-a_Cl1l~g6Ed<^|;4K8+Lf|a~-a_Cl1l~g6 zEd<^|;4K8+Lf|a~-a_Cl1l~g6Ed<^|;4K8+Lf|a~-j*5jj74IZu@v?gql5fL*kfUv zV0SCa4pQf^DX^v3^BwH>%JO2hpO?Tchiz6?^s1v`3;eBQ8-dse#709QHUhEHP>79& zLToe?Vj~b6f!N3tVk1+CjZ7gn0m)&xR*qjdYrP8>DeYsy-8X6&PKBI8FRAg6HH<1P0FhE z@L}pl%03MHsIt^A$WqIva;W7iyG-q&mapsquoGbqggpp$3hbe<(_m-7&V=>B7Ln~B zW;)0&g;njX1I%=QnGP`10cJXg89GYLD686A2bk#qGabYX?IC8AT@Kr5W9fb4a9CB zb_1~+h}}T!24Xi5yMfpZ#BLyV1F;*3-9YRHVmA=Gf!GbiZXk98F$TmK5Mw}$0Wk)| z7!YGXi~%tQ#264`K#Tz~2E-T;V?c}nF$TmK5Mw}$12GQ7I1uANi~}(a#5fS+K#T)1 z4#YSR<3Nl9F%HBy5aU3M12GQ7I1p`W;in3lTDY>440<0!?Ogc>Q!BMGw`OBj&Bm;n zZB*0hJKLy*odY`;c0SHuNMkYEXn7aI*3QPPosC&L8?$ycX6P$ zb0h3cu=Kf9+H(u+ov?So-VOUJ*k8l$f>kTSZ9}bjvkkQZ%{J63dYcqLUC~20=VAEj z^CLFhRn`8-;Hz~_w($gfwYteRo`kQ~IN1jM@(5YA(#AH_r^al9KBG#OKBG!jeQL}$ z=rgKh=@ZRl>31T?z6PsS=Gev?uxfpdZKzKK*qEiXjkn>y1N$!Qx2n#}1FJr7WwU%( zwUWwa>XV^1<}+=kJ{f9bR?}u9;H$MgHX8+Bt(3FbSlIC@%4{O+H0+rHI}_FiTLfDI zI~(O3341hbmEww_y)m>m%#qp*?TyV>C6l7kIi#q{E>-1_t}6c+RUdwwDu=hgZ&gQ0 zZ|SI*p!SgJD&Gr#BK%444}^aZ?7`SG1^yxM4~0J!{xta0;m?3y0DmTY3%(D2A^alv z#qejrmcbqdI~(?B*h*MjJ7#)qF&}%>dNW(p!&j@GY_R~oTKi;U?$;LRcbEaT1^ON4 zfo-t_XR6guwpa#V&D`3e5x$yDwM7$r^h(hT9~=sBC|nNP!DI()7i>3d3^q=-*T|q} zl3pVRR?TSj;;FS43e(Fo)qXq&_VQf#YOSmTEpnhm4$gF-MGmycffhN?A_rRJK#Lq` zkz*(=atzfr97Ac5V<;_hphb?MIB^W6MUJ63aSWwJj-j;3ffhM5|DbXyEpnhm4&C3C zue8Xa`@6DAiyXW`aG*sFw8()LInW{pTI4{B9B7eaC@pdfr9}?3$T5@_InW}{y~7CCrV;y{ZWXpsXga`4{7F_acLhSDMjTI4XLMGmyc!CMsvTI4{B9B7dP zEpnhm4&Jjk&?1K^Epnhm4pUm>K#Lrvw8&vfiyWr3$YDy09Hz9$VM>b}ns=g_(7cnf zN{bwNek0zXMGmycffhN?A_rRJK#Lq`kpnGqphXU}$bl9)&?1McencxtRhiHtS{Dgl zX^}%CAhlmO92yxZUuls;<0IuOEplj-q{y~QTI4{B9D!a5EpqV2%7GR+ z&>}}DEpmj?B1b4Ka)i<%M<^|Fgwmn}v?u{BN|3_bN_*7odIAcQfEFd7MG0t8f+BdU zkkBFtEs{7>LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{ zNJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9E zizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jw zv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2 zLW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jW zB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{ zNJ5Jwv`9jWB%X^Tv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jw zv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2 zLW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5Jwv`9jWB(z9EizKv2LW?A{NJ5K}(4r)? zCnAl+{&TR;!@dan5-fdxARVP|tRhR_A4pa`S@n~eDPN89`bo`{{}%kW z;j2+zKdG78|E;PyshP4_u=%iRl-EycM(04y`bo`{uRc4|Pim%oHOlKJHB8*B-}*`4 z6#9H%skI#a?0aSDJ8CE|r(Z!OYr?8gVL#NbpVW`8m(-8)lKN3;P``dsKeeY-9VPW6 zpVW_zlKLs%3x6W~N$?MZe-P}!*fRzGA@C1{KNbEo_|xIffL{QACVUIN4}Ky1BKXDd zXTdLnJq&g>?9s55u+^~h)U}iPsoJVhVLz##^3|xYpVUwJYE;+{_3J0~Q+w3sV){w_ zl&?M=(@*NBeDx&OPwJ<9^(59$>Zg45B-T&rr+oD!)=%oEd^IZUC-qal%V9g1?11fp z?S_rP#$nZ}o_=bHhtk|r25gS9q-o0L8iyL{-~Mcg!QdH2F{Q50jBMI+eNO%n+84(D zMy>WuV}#MF{R|_|=+nN(*vD9}eHwcj=V?F77-_t#{ah;NZ`#i@3fL&^=aXNh{UOFw z<{0!8qx&pBqE?q1qQl886koIp~}WV_$CT{T^d7->m&iV+X%U z`&q^zBB1?TqfD&QexA`JZqt6g(PZXoe~7Wz?9~1+V;}Q3+8<8-Q`OPVXfnDs((Y{! zC&S)0yLU|@+S!%#?(`N~KHqfj9NX@UMZ8sZqSsD@lTkZf5a^A>y}@u?)~rq@!j*Qc z-B;kV4);|As}5Jk)S(&aW9hTK>0L`A2}uQcRknYZAu7FLFF~|NdcuhnUb`bzn{d3{ z+Y?^nZH;&nk?_o1% zu3ELKAgm9!(KQyd**!D=-Ld4F-bi~yMmytl5d~ezo>+a9N|%J+2aIG_#9PrDZlgpW zneI(paAAQpxNMwNU?)0f#@sUG%=&p%H4B0@Gw4jC+K3vR^p~W+wMN8fH@x&0rtL6! zZH8_18f%OM&g!DQUSlWy6&jY|qyN*%pF`)^R7Q+)dyOjc6O>0;RZ5h+xKUsPXkUap zuMwpEaYK?hn6AOxUN##T-4k;!jaZ*8h)%glTUFpAKUBxR&ydP%Fr2nh% zzkm>aoLj|MMXUhP?x8dP+k8p7RuyGcE5&{%)zFPZ0m|&5xYpxpRNW=c^wM<>Tt|}5 zQ%qG*Ibo`gyY=Hds?Gg0!i7|O>tEJ;psWI1YbRY}>__#Gw5Oh4e^gOxT0kwWh8Eqq zW&XT9{JhnY8guuK@sAE_4FBYxxRG%tn8`Ajhh?%Xmd$clF3V&2YzQ05hOyynA2x!G zWTV(bC#x7@9uq)YBY#Y0pUBkAs9qd|m9lM_0z;?15 z*-h+bb_=_e-NtTbzhJ*)cd$FzUF>c~zm3iAVY}FG*uCsNc0b$Ae#;(U4>J0dO7;kQ zls(2CXHT#_>`C@J_7r=XJ;R=5&#~XL=h+MFMfL~w5__5bk-fs`m&Vv@>~;1Adz0;D zZ?U)8JM3NdXZ9YWUsPcqun*Zs>@VzN_E+`^qhG0DpR+I6m+UL{HT#DBjeX0$V}EDg zvme+$xWO6coW8@5XK)YCkt;fL@;`BXlQPvka@;2ViBfNum@-80b-FyX)@g5%MHt*#QPjJbTypONstN3cZ zhOgzv^Aq@q{3L!dU&q(;4SXX%g`dhd@y+}+emXycpUKbSTlm?$pKs;o@N@Zj{Cs`^ zzmQ+VFXor-i0QC%=*3#Bb)e@LTz9{C55e z{!4xbzmtBK{%-nx>RWh|CT?%AEe*?e3*Vg^HKg7f1E!-zZm%> z{et0B{AvCSf0jSTf6t%iFYp)nALy6-UZ!8Sdxd@>?oa$R{yKkyen)LD{l3=Q{2ltm zp+EEY`1|~S_y_z${t^ER|Cs-kf5JcIpYhN67yL{96@6p+H~eq>TmBvYJO7^lK;Lm{ z2u5FHDd-#hGK7b|g)K{DiyZn+tvo^BokZU-G)xQ^`-l-@Bz?QaX!UImVyqY^_7nTl z=kX`dXTrT=qL?HO6qCh4;$SgF93l=CQ^hnfUCa;#Vy3W!PZWwGQ7lTtEKw@TM7cOj z94=;yBgB#7C~>r?5S5}zREru>E9Qu~VxE{!D<$iNUn~#-u~0OKMItB`i;!3%meOjH zV`!Dfv7$*V7tP{0(L$>PT1A^^7ZG{`-%0PsqoP}^5HZms;`H98mu5Q?LW-p56D!3k zv0AJVYsK;61aYD`Nt`U!iS=TG*eFgBr;1Htvp7whF3u2VinGKPaW*}ZZx!c=bH#b$ zd~t!eP+TM~7MF-i#bx4hafP^2TqU-NtHm{9yVxPF71xRD#SLPoxKZ3BZWgzQTg7eS zcJT}GOL2#|Q`{x)7QYg|7War<;y2=6ai6$f>=wTj4~PfFL*ilahyCLR}0h&|#- z@jLO9cv?Ioo)yoD-;3wP3*trb2l0}4S^QDFB3>1L60eEZ#T(*Hu~)n$-WKnOcg3H@ zd*XfZKjH)Nq4-GrMSLv&Dn1dPiqFL7;tTPm_)2^&z7c;D--_?V-^KUh2k{TnFqz3s zVVY)!=`l0SEHm58F>}p4Gv6Fy4mF3F!_9rn5#~s9lsVcQWA1B?HOHCznfsgL%?aiK zrq`TkPBITPCz}VE2b)vOL(D_Xspd3ux;euvFlU;U=`#z>BD2^mF=v^jW|>)T9%deH z&Nh!Qk2H@mk2WjJO0&wWHfzjUbB;OJoM+BA>&$x7Z!Rzc=0dZ@YjcE;DL&n=8zi*<;2{+w3(RGhs?IY4({b z%~j@VbB(#yJl;IPJkdPKJlR}lt~WQB8_iS9Q_W50X7e=jbn^`JO!F*ri+Q%$Z*Dcu zG0!#6GtW0KFfTMOGA}kSF)uYQGcPx#x9@xEAWSlo`QC-`W*GZ9JlCE^*99(^O8$m+IOxF^f$vy+kb)>uxwucuWF z4LakVb~_deCo+2@33|9rW`}#oll0i1i<2dl6pLi{h7*x^EYgw8fro)hR#=S&qH=}V z8|#x9^f=!W_H?c3?TW-bR7TWp&ycaO>@wFz61K485s_SFXC%845#rD8OPC$el@TGM zt21O|Wh9;vQKKO<9*sw+te73omXV$)JTn%NG9%*jg=3j?U15TyONmG|=HTJvPw(p) z^9sVTbkO9$whVZ^j=(JE{#~C(Y9!!t*<8sqYg=9mq=3SbIbTv6U`UMG@i4al_YcuZo*0NLh;b7#+=O>q}5z z+SZ6QkvJ7?uZYB{*i0G0cr2?uO2ai7mD%ahX0DxR?;u_k&H0^u(O4|fV}pU5nB5s| z3&*H6W%k9RmQ_)mGce@KwpUWKP}lBhk5CM#Nl?(KoIaULVU>M|cp@L+O>Jd_+xn6b z-qWYrPnbCC?Hb~?40RQ1B$?S3X{S1bbE$cxa^+DKdx(uby28kibRAum=sao$3Cf&F zZdW+g;X>-2GB4FG6j`1M#K}{EdgNBPaqNgiR(mSIbaq9Gp^S_j}LGm_|`ZrvJ_9uHC-F8p62a5FAZhh=jE>C-OWwbrwv0W1S+>Cv0#=e1!*?s98YjBWs zhe*g?liHnG(GzY<*zwG;n|dm!$0<&bWLDUn)Vx+?hTYUtg+e@SE>P6~P;T3RZ&tP2 zNwbZNr>ZSXg?rlEq}ol|Q(Fl;obzGseGawigVj;d=XnY=krZWkr5bI?Za+=1M=T?4*3 zmo&!gQu;Ly@lnm%Lz7$7baLmp*P(W0MqNK=9w6Pb;O5SAYwn)q`a|ZWFHr5yqAex+ zQO~^jYMV#9bLS7#A-8+L&#N0$>AV#`+E7vzk5Rjiwt4E^AjXj7)ek-|HfY0B@6s7V zV%967Vq`q^ZljC2$pW{uxLewSK?UT+2W@y3xTVG2;KakdwoE2$x=V_hc&CWOJ2L~i z3D~*`1l&N`Nb&<+eeuq4qOT_w?n~y|gSU8~hT9R(BDW@VV&HlK^vaM?s-Wh=3>=k zl4Lv~x6k(>$qeah@6*>Fa<9D)Nk&MiPX^5}#yj&vgReZlZ}3)TNOy=nH_cr-a0R)m z2KmPf^4ARb*~g@0!PDrnvKC2BW4cM^tWCR~M)%6rBFUg9l}_pDh}l%j9Nb0RyiiWK znHBCmBr~i<)0J=>%XO6ueqL}8e|dDXr3WhA`3LHn;exw#Wq_vabk$77l*c6@0|e&{ z<|!j-$8DLPx>#)GRK$9_!f><0bnmBUlV~`vrdLMk!mvB5Cg~o}pGRVZU8+Oo1?cIF z6bn1@LW45o1bQN!?uo;rl;uZw8Nf3uBgt^aoG@J>9yW@~i!(K**+_@zCK;yt7I|3; zRN-aRg?oF$)QNjq+r!-7#~1YRWl`!ps0Cjb6^pv;j9|30CoC3+`!aQn#KNwqsG`4x zGU`HAln+y7rfQ|i9;#1H?aK+LNy&>0y0R>)kV}=iE_fsR+~cXN*qMR+W-FbZ(Wx#n zqdgK!hBI|p^h8XTs1DK;b~0?L!ZKFi^5`j@F3+uKWfhP2@zv2xTVG>uR3y4=4?VW` zgnb!EM3OF5S3&gBWwy~D)hNSOG00OTr)oCzCpFE}#kv912eFZZ%y6^A9nq-IvI>h* zUWqU56{fv`qs93;M@fldHoY}VZKcmIO?zc&uRP_=veI4}YgP)&S6q@h>Pwg6OPAtH zmr|H6r7&GeVX73XusBspVY|lW6Vm|YF0YOtaOf9=^V4t zIZD&DDoxj=G+md{bX`i*C6}g4E=`wQnl8CCU2<8v&9`)C3~ zDrK(eOW4>u%U7to5P7;u&GHqM6lSO2nr7g(m#wBHdT5HGJ)1@lnA7OW!>HKxWv-g` z(0(3fK2is0kerN$W9`w7j*M#DFM1PpdtX~JTlUdCMAbM0BkoLkQLBdPS!-L15hmzbu{_sJ5Lfsl8d1}@tMQ@&(?-|%20#X~fH2;(G^T9@X3$&!R z^3;SyYD3ku(6TI@qUN++sJDxBTCCF&ozBu}sZPsuTCURyomQ%}wx+fgX>DzlPODXF z`D%e{6;@)uRa6apN`X%)aC|jIHR^myQI4<1tuLiG-&b4gmRDF?L~UJ0!}jVZZu}Gr zTmhxU838qH&9GrZuzkv+CPi+ER*_pGrA20!ZLd%vYmLP0RXD3ypH*zRc*P}d{fkTV z_AI?U%e{``S?+Zd&q6J%;#uI4Qt(JAu8&giNGW)v6g*N29w`Nnl)5|>&r0Ee7upYA ztm0CQU#js-HGZkaFV*;^8oyNImumb{jbEzqOErF}#xK?Qr5e9fQzE#;?%$6&k-%<5z0@N{wHs@hdfcrN*z+_>~&JQsY-@{7Q{qsquAxEUwh}l^VaY zHW$2BS?Uqg<+w`Mp-R`GO4p%E*P%++p-R`GO4p%E*P%++p-R`GO4p%Eb5N!0P*tO` zYX`8aH4j=hinVSOSL-@d>pE2HI=Fgb6<6yzRO>oa>pE2HI#laARO>oa>pE0x9;$U5 zYBYY0=AcG%P^0l{G=7c7uhAUTX#5(DU!(DBG=7c7uhIB58ox&4*JymLpT)HrzgFYd zYW!M_U#szJHGZweuhsaq8oyTK*J^xMudU)*jbE$rT|Ku-v>ujd)hu!E8?@iWFR@(w z63fLev0VHT%f&CTT>KKt#V@g3{1VH>FR|R~FVT8iV!8MwmV5mrK9~OzpL_i!KKJ@d ze8BhBxc!t;9H$h=DNP+m{b(EYqZIX{6!oJN^`jK^qZIX{6!oJN^`jL0P>T9diu(C# z+TP zs_WtQQ`*+`aQi83>w38Tl(uyo+iIu33>rEMJtx1Z9s#&`Rvug2}Cl-t9Vc4Pe?K5zmdXD+YX_(Ja`-b4bG+mOr znJy$BM^pLTgXyfpQqQ*PxEdr3Pwi->w~w?hRQ1z6^;KE)AYaf+uS_%5Gi`w_J!%If z^x}(>EIi$llc}C^kNp;2m4hc*b%J`BrIdGcsM}GYuh7a`oSJA&YA2&p zHQAwqX7JT^jyrv?+$=SFubg3nC+*b^HqYa}nDV$UrE&+okjhTKjPkgX_nCUe-s8^F zXX>f>oPp_hK5u@unlZzKkg2>pWm3aOJ>a!UQUh751TDiVc6&0Vsh+J{NL7VFt9gZy zMW3h0H8TG}zf+CXy?L}~Y&89GwIz0vHED}{ZF6Y#@hpSI!pS)09cFNUpx$eYUKH?q zY2~m%<RgB*Vz0`sY(^htZnn(Z*P+!}wUVGi=-rdpGR8F={x*gRqaoJ{_~$V#W)wuh{D7 zo3QW0exe$h@eS+`$}&@`kmkVd13OMi%f}|cPK7NbTgVQBJsP%_Y!R!6T?D%73Ej+V`c_JC0iR{&a*9@>xKj9CQZd zpnN(9dH*iQ5W`d}nV6SNq#T@0W(QFKX`Q7iSM^=0h5A&$NJ5%q975lSA!xyAfW99? zrS8+};CXC6qO08Kw zde&9{8pq_*EoPRlxUi_CyrjI*YWfdBi>*QzblU$0s%lEh{%3gS6k6-A8hnu~!w~DY z7}omJ`TF(7!*_kQXw{kTm6d~ik%0K?-+mj zo(m!6DJm;%(Z@vAll^1@xbADURoPrg(=Psz5cGkzs=AZdO<~!r2f3xAn zWq*9C^79$L?R$O8O^=;D{?b@|)&&z@fAz1OdlL`Nd+^GZ*?Zr*fAsdY)zOj1-!g*> zYDC-DKWwdkz$*4+QG3Y9$Yjhs#5&lToZ7b7rhWCN2kbW4TR;<-QF_}FS07oh@`#b~ zBN+RK$t}YwQdOdTV3w&Vi4BYy3m>U_eDb8;{q&r3?pQMJ=<7Z__x`f- z+xuoE54$+Uo)e z3vDPn>w# zm@B7OU9%_n^od7&HTAGx2hKOH?aA4={BO;{FZR7->CoPXzWef)3$_gz^ZLW1*R?z` zbXt6q`RRvWte)~*#v>mWAKQG-yu#0lsP{cge=~INo3nfD1#fIwR9p4+t37k`eLH?a znYI4RK|P_d!Z*qqp(xH8k++oQaU+Siw<_El@r|_hQM)ro`YTZ;S9yudC zi@U{b?ue1@4sR9BR7X2#s#eY2`VO$hyYU;X533F=Q~g(W+al_zG-a3S zwraB|)ouSzv|8w{*yf*8~p}U{^X!U2St~<$|z5Be|@^^K85j%g+ zeT!z?H1~)v?|yOlar^PBzMZ*Z!j7-EUwYlR$NAoq>leK}q~)Wd_dn^L{MV0q?9Mkf z-*?>FZeM}8Wc`R6=6Ij>$^4}=o?2a8biqEC>~qiST{Ca|^V<)ean{s_&YZZpr*1uM<*gs@%K!Ww{~xz~ z*R}1|k%!;0`GMbP#dy_P|MGvS7^>~Kijie`sCRQ_SQTpD0p?*=nKf%$@wUQEsgEoD zOgG%NGPtQ!RX{~lOC5jEzmpK=Ax(pXP|Msg)*6#)-(o}_NeDHxvKhV^B}IeduY`nj zdj5*PeX#7o>ivDEueoH}g}XQ0%>J-{{ZqG}u`K>Z)}h;*AK!D{i1*Az`G1`=Wu{Sf z`#VpZx8TwjCbf?G`l!;0fnMLbPtPpde8>CmUu697Oz6S|lYhT+%7V4G{wiGY`P8T1 zd*YAHul;7)sYl**#a(~gyYwIT-}%T%Up|v}YFzxxn7wxxS*_5x3ns03||4x4q z-H#)S4&M9Af_?WMGxX3?Z=UpC(@$z_9XF^O|GT?rsZ~ORP!BDrqNSY8ek-iy0;)b)4&hc(b5kUL`Zz%4b= zCzIX<5gJY=R`?FL%H1j!E~XWGQhgS$Pe#1qq*vWpr2Zt`;9JtnL~q!8NZX-SIn}N} zWfmi*q)Sg-XqDYgPYZMxQx6ODwxoPUp?XyK-@5<(o#XFpxsg^(EE#h`#}mz)@?ZS) z=Ifn}XPz=-UN;2Fz#oztzN9)7O)@*-s%&>h%O}Txqzxd>7bG+5} zyxuXnQyAF7y?D550_a?p?+tJs3&%CZ@%GTuHXx;GY^p?3-zI5YAwsYf4W#?Gs zBQ6w&opAKxyKi}O=6)Ohbi?pPNAf#fn)dy~yRUEBJ~Vgdb;A}8DK79||MU~h2fc9C zy`RTVIP_k&{O`WajW3>cYUi@k#%|kP^2rC&woiO->sK4!z2Pq{tDBE++4%j^+~pPd zZHrs}P&M(dZuj57UL~ep!foKEUAb3vF|Qf5I<1H&w`J2@w&|N1mN`aPORPgucX!T4 z@Bc63*VZeosp&JhHDTPpK9^$s11pI-6Q`XJlq) zw1b{r53n-z!>~EB|J~=uZMu2O*()A;W?lCSbN8Ko{MZ8PpwS2Frx#iaZ2$Q2Wu?SE zRg$`kk?@SRMy7D-X+=Lu3GrWwq)!!kfJu*07ClC7o3shdom%_P1hKa*Tm%7B55)9% zG|BSrm|*Si8)xlHJE-jsN0TqAN()?xTje42v4W8oJ-gzDgL@yp`l#~{$eQtR$z?mP zp77aE)I{munc}yvo&R#hHR0&(qi$IJnDyw^*(X(gJ^Ai;Hp(%ymVemgSHJb``k5d8 zc2D(ti8mMC9UA7{7{Bn`cP?${zO&T#r)y_?c$V?l_`rMq!d<6+v*7-3J42CAy6<1R zr@d_4uwkofR{B2Qv{npldGL9fD2jme};J&R?I@GP}k>2nW0Y7y$hoROpawCGKJme@-ZU7bq&FrGTn znyrrKjwrzgv%@j(ylQVsD`$B9YE_xEJCfcYnN{@h2k(+_EJ`2UrYAY?%0l11c#1c3 zM-E-A%BBxjyPw&XDP-|4kpJ!Q==|z!7er48w{-vp#%U-(p z+M_=iJ1=+Agka#os_XWgxpT>1<8wVXWQ;1G(02IbeYW0n@iTj}N={6?J!k3nYo0t~ z{(DFF&M0X+`POyMJbc^B-+leW-%o$}r5)Q|&Hn6~&yN4=Q+*G79a-2u>5BVKy!V!0 z*Zpo;%@F@{$JF~%YPXTp?qnM7QU@D>an6s1CYkH3YIW!U^9YM>SKCUrm24_XjeBHU z5e-e$?PbQ#x^7jlDs>P&7^QgKQhqF*qys5Q`M1)kM`-9ML_;ht>w7EwtRqhX#oj2hCwyu^Mco)Hat zO#De7$M9~!pC@g8qqAbvn74la@kv9Te(;h%wB7f~UFW^qooLM_@x_W5^PuDJE<{F2va=iOX=eoM{N%YL}bu0Q-2 z#htywHvOZqys7c+*oK=*PKeZfe{s)Uqt2gq`Dwkw?myxetry(+>YXpV^8OVSTTlAo z#Cvv}`(gaENoPE|YL@?u#@t|r@A+wm+_q@%mbEMHT2*~t-Ys7&KWO^fPn}^MStl-E zv*)@6x8^?hyUCfk51hZ@t6`t++Ish8m%iLId&H+7aL>L|{IgHDi_Um{)9e4Utf=pZ z56_FfRc$XYV$ZyI>MKjGyY#xFo~)nPwe_=>U3=g6EH9rpqVO-i4Wg4|v5hlkt$*_W zTiN5oekSMx^HkeD)l`$@LAP35tR3QPzP28BHJE z|FTc=9RF7Hs}DVy+10!_uzSt(_Rc>JZfP|BGuN*>;-*jJ!@DMBU+_|M*GKPfiETBu zyw!izkXxUfeeyTY9slZQkH6O2#wUII)fe|p%YSS6`}e+nT3N;^r=0ZMkb+g8-h22H z_246O=e0#z6_{*oB_T|`|*XK-Y zzVFj#@7wum!KY=viQIPXi)F<--nm-I&jxnV>p|4*jP{>fzBpr|aT z$BWb?BgG&$y^+Z%1nDCgzM*tWqg8!YiEma3y(Dh@SqL8eVE9#EygQ>W=j10}_wYkf8Ta!LEdF)m`!nyl?7Im^ZoZ+!x%Ij&e_A~@cI>(L-1yDH=W}1V>g3*uzdXEm zec_kaZhT@__m#UpzSKW&*|q0&3{Ac~=gBu;8=w7ITln;^*Pa^KGyRd+^rGg!Y#P1w zo40=TUWqwp@v=Qtqwn4JusMH9`>x&j&-%{3cHLuNmk+yhSlP0zB_F)Bk2CDT`7avA F{{!U$tp@-A literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-ExtraBoldItalic.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-ExtraBoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8c4c15d88afd016a601cff5d0bdbf726ff571b95 GIT binary patch literal 213336 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

L$nC@d}9UdXD=UZX@X6laFvSgd4I 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�AnIPM8kPe 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Italic.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e6c541417348e930324056bb998a4ec4da37650c GIT binary patch literal 212760 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

  • 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Light.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..563872c7680aed4d9f8f7a4bc4f3c1506c2cbbc1 GIT binary patch literal 222236 zcmb^Z30zcF{|AnrbMKuyE3+}f03$HN2#AOvBOq>!3W&%if-$%PF1T;0x$mivndQD9 znpv6|nwgooWP6$Q_}E@*drxLPEmjJb|NGpTLG-EL_y796egkLDUCuqrXa9W8=MJHS zkYIcXBspvFfd0AJ|2j+f!Y2r^-rGMbJBP&bPZK_GHCjdXFD@FaO*f?D9QR4L{)5Z< z>JxfBhx03h@UIpPPD*JwzkNL+^f>O1s-9dq?a&Lq-y+0#6!%wG&%W1T{vmijArYN$ z|G?O3<0dbvJZ2)q(vuM7(Q%bCr;$kFLVx$+zH!{7xnqxiJgx(eEqLBBrE>C^q=%nfNBGEYgou`DQ)k}G_4{cO;oIjE z5}Pn>#+YfJKe%T&A@-l~On1UyN5ekZ_WeBdNJG!xiCTpVguKz$@(HUiCA@v<)}`i; z)KRJ`oT>@OuHu8|RBM|7Lv_@xOVab|D7h!!J^7n|lwIKukXjN#%83F`8c7lvhDTG$ zSA@r1URXst;SN!3Q@C+G%2)I6k+JleisQ7r$SVYn6Rr^MCl7H9MaLaj=Uw^??niK; zrCE%UEM$dhEm!U!bQilPWGarKa-jF~(-lX_ ze7c6L?)ZpG!U_Xm{gbbtKl0DoB5{7FtQC>rtjxquz0c9P^a+Jv^b5W+U z_9*%6I8gWzBtvP#bLX*Afm{&&Buf?hP)|U?x#A6+pCuQ#sicD5Y{?baJv+G|ev5mr zppGC*g+u-t?Sx_Iy9?3anNvbNsK7HLe_1|0rZkdc?7Gk>w?D?7;Un<; z2~x@(0!)sR1N=d(=?xOaH<5I9%r|2Ei-2P(Z9<*PVBm-SJ{(^}DMVR}lEB&sPOPn- z7K=}i(de^~pG8V=Zz_X5yC#s9oBU)_CtqtMsazw8m)G(NIi~1Erpxf&OA>HBpZk*J z;Q3s|HPQn`ixLmm=P|hdT@h!sNDLP;9vCkC1$gMnaDie)>8?0Ik^*>OxM*82uQ}|T z;i7GkaRHnO2LL|?_rEFPIZ`F#0(fA!2o&JpbKqhk>Q_;I5H^unt$1L#Xj>Sav2);} zZDF{Oam{MBem4HyHP$YV{|~iHqrf>^zf3O-K5U-tB-*KUIfT4jat3)-yq*OmU-cl|T@egy8T z7#`)Z@2&+x1NUTp15EF(l}Ti&aue2%`7=K7*OUGAql_;ZZ~S8oo|XCLu3F|};P3z6 zn(;g1IYwhLp8b5!c#rXa+nSq+d9H_?IN$OcqX9U8=g zIf8m79ZfP(+fg{7o-?CPWpu>&PI#r|L($&yA@4*T-}0dXMa*sakek)=4r?RJIwtSd z6N^kUm>bq8%QJ>kSWBga%aazSOoaTe~aL|cp{{6cb68K{qdj+kuNLgovr0J9N*#|X$+ z@VTOdh~T#@%NScT&rzOk4bU}N)F@ho@U6Ox5_&6f*DzJ=V|qqalGF#7;@1E&Ms z=}0cWiR>jeq@$c9+XBp9C{%m~`MaLviIZUy5HeF026&$byg{qNZ)7ZVQ3#3yB^9Lt zZRem^@EpV45FAeh%wrVW$b9a5BFN|LTA=Jj`&8&^R_duymVboqfY_=-*#iC71tkn6 z3x(;!UMOyq7|e$-t1eJ;2Vf83oDPxci*RNfZ^H%9Vc>)IrL3@V7>odWjZh5Qa|0K! zOO(tuV06o5$|$KBea`3Ik`JjdqfuVJGuRV6~MS72@*kvZ~sPJfMY84t;P{{d{hS>zMISwQ(3<(l$) z60h6``epNF{BRCBaV@dSatibhzD)uxnib$RAq@0B0qa;!ME~5f1PQdt^bpfojF0w_ zE|5WXMI7J?ep9@K=fG29U#xKxc(w{_1Fy(y`2g?<%ndxw_^g$-13KUl%wI>+Mc@hJ z#xuTWyw_UiqW^X1Z#3zpu#wb2&Eyl4GmO_^PhEfvKE`B>%;%6FY)(v$$hE&uSzbd1 zuxA4_5U2zCh2d6~A$wr!FR~=X{ zlcP*FFnK4-96x@9Cwy>Xxe{34RJP62zf2#k7z5{d)TtS9_TbouAa_f?>ZkmO9O`9@{ z?jb$sUebjX$kR;7(K+0C;^uF{CyF2)g*C(mI4#5VkDUnNV3NODLn89){h$O9TjQ)nfvri zdCK#=nm6z+ehpvCKfrI{xAMFB{rmy`9sXbZ`$CXVBoqt7gptDi!a8BSa9TJcydzvt z1V_@y%*d6IuSLEY`QON2BmasjaA+M?N2DX#5$i~HxE#~lZq z3TLo0#OZKGJ7b-log<>TXffIlZH^9)j*L!-&W#=wJtpSOTY}Wm(%jO5^*FGOJkmhk zChyV?)J?1CXsn}wK8mY(2>lh>q z7e)!Ig@=TPv5vFC1>xOD64^U)Nn}Ih>yd9o{u22c)4x7UvuOr2g;a|tSSjVGS z$CG!hW2k=}rZ(#sjdc*Lqp78(@zsl0 z-@5wx)vZ@&Uqz(oYUow%RrMEBu1HsIUHR?G>sMl~L|+NN5_ZLW#c+kc{O#p;FQ5N( zJY-xEH&~`JHdWsT+VHN=sk_eqpHEqwiG2?Gs=xUTwD_A_cU+o%$Jsxhz;0$AemnVr z-$8!lcaoo=@Bhp1BERwtbO6nx?P&~GLwC@fw4Uyw4g6mIG5RRoOCO{A=;PdYZX&%w z|KOkCbHE$3xOV(nt}B_$GuValm= zWxFbK6FWJwLu;}UJ7v3aMm0Jr9gV1jSXVCY;F7Dd(J{)=7>la1&E-*z9<&^LS4)qt zrKhzeH9C5do@@x0qw#!}%W<4m3@XR*+ANpX(fFf$Tp%9{vGPd}PMl6WAZvq5<8K@8Z8dBIBM+Rns%6W=uPDVu0wYB!yHisv0<^&?8?!N z#e>STv+Pc%H?h-zM!gF?;TGv9ciAZRYgEczI>uvFjik12aX#_)u;sBXxHe< zVdaf{C7!M2vukTtHJTC{<6T*e@$Z_$7@(en=6(6D`JfCcfxKqa{U@^ZsBg2JmSU=gW>{0&z*)^dU(E&i`Cin=U zw7k)i1&Dbn{X~*|I5`PVRE`3|#xuMQDsN13O>4Bc`ueB{7udA2#}6)-AMstyZnX4k zL^R(2RAW*$o(1V=*D^|DQ(%3$29-Zg+$~oQcXimGag(mZn}y4bA^kvQvDvldqsKNz zjk1ph-;H&Y+ntRbFEH$Nm5=cd*ZuM8KXim0^sshM!0=@I?Ab?1X^Pn zjq#4`FSal*&+%MJ79>&Zy-9e4Dt^uQKU4zSe%B>+!7TV{rvCU*49a!2ou@gjF-@`7tdeC7H zT|Ky>{COj6nAN4_M>xv$8`al)xIONbKkp#KBVXm%Rd$gzaj+BCQwdH~a(nyp9zvGL zcLn)^d|rK=68W015w1~EeVp@MGs^7_$I1hF;G|a{7kqa-fgS{0Q~9nfk*|5#=P+Rq z^=K3xl}GK-aY3B@FlLRJ;mQeEnQBU&(a|7kKa8g^M_fKmmmF4m?7kLD(8A;O&A1Ge zf9SG`@@I4ekICN{s4x3~TtaKW8PGS`j?s)z7IlgyQif;Je~Rito~);s3T>1++)a8yYYv;C?g}AL{CTb`%x(#IpLy>`tGAuUiGF&hS2E#f- zi-8wm7L-vpDVs_blc&i~L@*M%B!nvHar)5V(!mJ{1CJ|Pph?ulLmTPp#+bqE+cT)5 zQC!_f$|{DIAExv{@5;4nN#BTpjVXi68Y7 z5jbO~^4b4>g^qwPYaup7tB&D&7QVyC9UplARKEDUj-lGtiTHi!W7|O3Y(%@@w(z?u||APsZsV*j#utbo>fJto>Kj& z9;mKWzpQT2q-d6Ej%vQu>a|(gD(yb)$GY~qO5MpILr_)F{Xr*!zSn#7bM^c5AL*M6 zVTK-t(S`+vdP9q`)VS7o+2l6OGMmf==DFtM=HG&~!PUV#fmuu+ z5M_ubWJSnxHqI7q8)Iw0--XbG&}E@Ngyn=y4*PF-WcZHoYxX$%AiLN8mA$E*yIp3x zdF{@(`zazlVnW2sh{qz{gm>0GvN&=~HO6BV{}S%ee~1Or=u@KUylCS zMO|B5dtFCeFT4Kj`r37)y|R61`;P55wtuYsv+ZALf2sY~?Qg^kjCnTZm6%I0U&q{t z6=R3SPKsR^yEe8y_E7AJxSnwZal_-L#4UBV+hJvg zjUD!Nc&@{_4i`FH>F{$rjW@+d$EU>ii!Y5I6+bP0Y5c?SKXmNZv9#lujbRxj z{*FgGp6>W=$8S6S+OZ|UnBYuEOz4&{Ghs!-#)O81g9$Gtyq@syge#pwI~8}T>@>a8 z!cMC@ZSAzb)6q`168k5XC)Om+OJ@H^?Yv*m9pX~fX=hr%4?EF>d-;>0okfgYz z^rU`CMMCvPs$?3_t$>qu8ljkPaCT~kVnEYb$h2$&A*Sh3(@phTe zWqy~sE<3v%>T;^fg)UdR{5OTBbWEA&R=N+nUvgh`f93wo-O^RlHKXgeu1mY_@A_)j z=G0E96H<4ko=$B^Gp2>5bxiA#R**I#ZCcubv~_8l({`nuN_#c!owWDUK2Og~@1I_j zzA$}d`r7n2(%(zJkuG)X)h)YQLAMvXy^>+hn3}OP=&}nWxthuG5ZrJ(}Wy%&gh(7IT!k?`0pnSj!13t-fEPPIrw4yk8eO`gbbsmdWo2c< z%f^(gE<0FuyzJ5t-H>~RynIjBd!8%rQ2u~d358YZea8Ey_p0~L3PZ)riUSqz4%H7$ z8aj07%R_Gr8$ayjVeb$7Zg|x2gyHGKD~GQheqi|9!>^BMKVsa710#MN88UL-$hZFa zuToW6Q#rSCX_ca?f7P+7*Q!3O`l{;ZYOcCl_3Y~Vt2b5O99=eg&*;C#aAUM%EMqdp z6pyJKGh@uMF%OS5j;$H{$~fn^)#I+$^sHG?^ZodO@n|JM7zT$QkD_Nv!cJ63mCow0hr>Y=MA zt-g2lg4JtR?_B-!8qb=NHPvfot+{{AmNf^~{8?KBe`{Lpvf4*#AFDl9d#d);+7D~L zuf0{LtBa^htjnw`uB)n>S+}xoQ{78-*B>Acm>(Gbz)NdG)=pe|{6W=&{U0oP@bEhO zy4rQWJyiD4Q|ndhE7m{0{*Q6%||xB zy!rjj-)(N*V%ieDC1p#$ErYj=-ZE>;{aZF|*|X))mJ?fE-SWYf@3#E4RlPNQYsalU zw&rggzIF1}xm#CmUB7kb)CrT3O(II@v zbG%w5@JdRO+(~YenPy}_+qt_W2Rlv9bd4!)s;WZ2EBSpKvr^dnqC7!L0ogp5pU5eBo@Bbur?it(&^M@gI+6Wf`cs~5s^wkv#0QyzObS~t zuTcPenQn6ieBG$T?QM>>=Fp12@uXk<)+C0l-bjX7MA zoYY<)nUJ6_^u`47q8L=*6_2-^c_t(*m(?CykTJJYgf*hT8)^*_6Rg$*F-Wjsizz7y zt4hMhBrhK3C_v#mW-F!g!f^quux5*>w7ODbW8+doLfod#Tx!>}^i;Ps#HNgmGlhgG zyP`@3b4s0A(OV;h_uVnCY-$H7K4<}VddQSm`ik*BMChlt zd@l;viPMk}z@!sNCIdZj$%&nl+Bt1;3N0~dP0qN)Br&B+WXF!lyk4J_EGC7jEXwfq zVW3LAG#zrzDSwh??rmnHBXi;GiUD2^vqdO%8Yr< z3i{cmwJSG2^g!JfItQ1|vMU?buHN)W-I^^@Q`4nUe1gE8c!AD3{`~XDzxd(5pI-jY zf15si{&_lsPJiyi7eD;^@zw8s=HqVWfeC>1`N(2eg}rG9K^`0#f&PktFr>J zG%YRNjmj0L=df%=N?JPAb5=_T4|JxbrOF_g|HvBy`+83A-u~XoqQyLQ08%#zn&K+W=pKO14Dow86Fr9TQ{UvpOf^MK+QcBN1`?S=B&A5i!!#Ba#(-XVL zfF)98kVdUl8;mMFA(=1BIAcqVu_=NfQsaVS(iJ>6Cx&jcO0)i0aQf)NU!-}#bbXv? zktWtGkCP7er}L$i{b_03@*27kBTOYX1s8U|wWOQJrAESnLJ_3nl`3V4ml#w@s!Y{L z)ne5;)zhles>>>5l_m|B<$w>&5P%pSa?a#3LB5&X+;n&8qUE~Cmw)SnhF0o3S6j# z58c6IF%z9AlCV&)B!MeJ)DPFczW(jC zZ+~ezbL80NbRnHh7tv|ba%r7(PCm)Heuk11Pq@--gDGGR6~e$=Eo;eipHskArbKIEe^ zjtNGqg;P?iQxKXa)0KNy^gg)exyRF=`0kSPYu(cz>N|%l(bvB`6JZ}pP#T*QwRLh5kYGPxf3cRsOjj_P1 zxeacT5t=k|#Bcz<%><#S0(vS0QxlxgvZ_jv#g{A9?K_ATF?Tk3{^FAlH6E9~mu_C( zSNh(t&p!Y1)B1*Em!5iH^3iEs%6^{z=BL7l)hEKmkfU49UmaZCDdm|**Y6nh)P{MF z^vdhkfADEgNCKcaOK}R=F%yr+sZ}clY8FLo8(V@!s^-lKg}K11P$>COy}_VlC^Ipn zF(M~zXJE)qKVUFOm{&X3$vO=G#j}~bDN}ndX;5da}%8<)zMk~1hFZI?xCH} z$82tnVh~*ih#EmB?MQb|l##cG@am8-Au@sl7kCj;vf085y*8g|a3>TQ?fUdQxIIMx z*dYJgzzvuVX2wn$7xo_-Bz<>d^2>cEJu&jkcVE1;?7^Phxiii6i97hIU%YztWuF%T^yD~k7GQko6sgpu> zS}85$Dwh`x<|B}La{(C(a;HKOKkGv7@gzm5llTtSFaxhPSfe|M?iA5% zj_%Yc8X)QfUg*>bfQtb(mAZBXUfn+c=uWGKp%k1TDj7fc?U{60@25er`xqh)^cpQg z%BSeLoD*NJtv|D)`O;_C_8r>2V#4WPUU*{f>pQO;-$uu*eKK>-1CKtqUvc5oo@oaM z6rH^P*$>}5yZqIh{Qa}X?;3JzYwecZwF|bF^*_kh)y>VBcu)7tEfep1fJxJ-Sg#J0 z5Du;fCBy^;kw^*EiC96mS-O0_raWP;;}05Y)D3uZ%3ELl_1Z%p&XQd9ClBoz z^YpmkkMnub6=}hV@F98w9YcqV8h7QLPpNUU^eL^r^!%Zt6&nj?y^WM3&Zm=*nW7{n zlHrNgsgTh`g3TJkAg@7_q$$!&)hyPm(};TbSpj850&_ zaz%G$YK*^JRh8PgGaE4JFP>4_JV z@EGCHDoVURLHP?tfm8DWg)Qeb&?Gt)StzIJWeRC3FU9yOqyUrn;4Lse<0_P?7z)Gj zvr0;&8rf2~W5!g$DMZXz{M#7^`=&gVPseo851oKao{b}=*j~~oKs%%58gGG?ih}Re z$KzC4+dCj@4OWK`-$4iuM@nX_*{m)0nuXZtLEhMa-OY4TXc9DYTV4csn7@=Bu%-Pv z$ZFAZN*LPKR$n`2;FzJgy&qp)R9hS~Wn1{M7*fKKsWQ|9&M8j(|DKQC=DKKggT7ZHY&Rk;VCCL_sPnyZ00h!;Jn2n8V z!)P`hqE?nC9I`J2&T1r1_z+gn<$y_ShMX46vKJK`91Ax}-1qEu?^LyruxHYSJ^y{F zc0)+cpmEFVrB6;XE^&Rh;&7Le@W zI32Rkx5`$K3-Jh_LUcmPI!s3A1%SpNZQuCxW72OoB+pp9^Y+5U_oR;~>@}%WaqRes z#rs3W@co=Rv1dJE~fEfI=(3Q~wA_jb>^rQ4L?MSW1x2^w3dRwaBPka6A{r&L`im6hA^p5nJ zv@fZ`O&_FVF4NNIi-#36%mH$W7(h;i_tapK>jii<#AH?k<$D#ppwIUTz}Ej-Ch`d?7h3&qcUg4XL|UJ z;@jp2d^g`S4wZ!#o0cyq>T|~65;6DHjc>Q`%ebZkW5@DC#&H*#yC8Bfhg-v7 zPyxcS1V&N7{!nSPh_vd0)PgAFdqrM@6wZ7fS`i*&-X4NvZOsq3Md_wEC?loG##yAC z0|)4d0|)wA6dG%vKGvHzEQGe?O6zEHs~{j6678c{Hgj31@XU}wxCyg1 zI*0Wr?ElMHX`Q{?LRE@0H}j-*e(DhRp*I~#^|Yfzqh-)h5G|)u=!0}Bju-BL48-^C z`N}ltqDmPq=@4JSzJ<*f&W#dJQSIS|G;eA{{|Xja;XxJfOOOl- z0`U{NALd<>nZ|HhFN|fBeDlC4-?L&E<{3h(cEYLT~C&9L@3QLE(j z1QE_mw=XKov`pLC%0O{aSBRC(81r?b?wanRd`a_Vm8z*k2*<+=!Jk_G8gxO}~wMxB;r^)~c$?i1M-0~musc#P) zn+hVjF|MgzrK=jtSBmOth55VLP5Bt^=c9Y@MhqwO(+=>HKVqQ6vP2RZrnV0Bss-LK z(97Ruqt@s>g;??lNe5|rtk@y#g&@2j?WH3r40&2{tCWVq9#T;o^ID}_(%0N)Xfu&+ zgdiJE*GrS3F<+JT(^A@t_N0TPgFcxlzi+DszPftC^?3O}fjEXGSOebXv1gPa)!! z+8`m+rh(M}eXNhtXX=Zffe>Tnb)1=pkYuq&rhS+!l3mt21O=lhKoivKbimJM(N-Gc zSIsVnXF7};sj$7CuAL{Xk~UJ?^KZZY#V_2#=H-fGZ@l@)o1L1+atq5J+x_?!a2C8N z{s#1Ld*IX_Vb&62Gb@CcSZxGvwZdMo!cNa?OKt>mF#uQ@r!I#qXJo%fjs^P^GpsY_ zHQORN{)Y7HW$Cwd^}ipzm{Y&?%9E77`OdR3$M)?x)8qa}pFCJZ=RWs-kFot8yMOTH zimnCEY}|XHusna$(m^$YyZ4wXYcUPPMI2zMBrzT{Vpn)sT&<#JB@C;9UV%YNmZ<)T z$ssJ}E<3sWaZ-#BA;rL3W^&{d^c07FOy~!JTZm5@Y&O9@gW?ZpCMGok8)DRCAy{J_W-_Uyl3F`|o`NDlKf1zM>H={Gq18i$8pO9xoqa9DIa&jH4kPVcl>D zw;?PE7fYvwutwOB@yJ~kF<{9oKsQC4JY7hd+Wc8X^X18OT4{u(hcA@a6mfO>z6J}3u>dyu83$SsBK20Dm+-tQV-u?kM;1L(wg>*wo@v7`m z&pRIsU!Nmzs>j*kc>fMt95SDmOXA|fnWr3wq?V`DgC)kO~Q8gx-Q zSkXG2l~}FDT(8xr2+#2D1#hMQvGXr(GeCPDeUFjdJ@ zvm1_3^{oqw9@xAm=9#CTIV{B;dgIjB=N29uf6w0ayBZZ@?)Li9A*Cl?X->>}?eIjE zcJ7j~2+?!o82qe!><(Fp6Sh;7gV%%^3_2a}iq@D#=q5}%B*#mPVnnW2Y%^)Z9%VuA zlY~A1rR-kn?_@-N-Hd>f2vGz4t_#x?S&T_`JQJo_l8BQ_mea zDwIlBrEAiErH@CI@5MgT-15A#s$mtMHk)p||JOJ414i|80PB@PDP{_fP|x$KVBQuY zYID4JN6UmM1}5j{r7p>eXyy^hUZ79exS4av)qIcOmihYHrS`QoufOxo^BWe|SZFMG zNKX^Hlqdc1-KT%04uc5g*ocA-unC6u4A^KRL{W_hq8e&drw8|Gti-}#qYumV>I1_A zp?AVYwkr`HwYiyLXL13lzKt6O86(rnKrNRw`(TzRR`m%}E%@&0^=ns;JVVDFKe%5g z9a6JsE?xE4wS6aGlj&$U?O1X1x|H(%4O7!+zB%&O0Tm0ReSc3}m^u_*1+O;o5$!^? zx!B!^3I+9rh7u49FlZ$DJ3#ffo?`%TW~ZoO|&SuonSEi9u2ir?S}SIu$Maf9 z^_y=#@_0pst+?pkN=UQsn{52|-D65$f5AQ^Y|XYYkPC^D1+G>piHC;FBuhN~by3}g zuI)PqcMPLKa9C7(v5!ZHQ?^SnIMqsJ`T&H$M=2jt@F+fdLgM3k4e-Vp zGxV&0n2heSZu4UGy@qh>0(v-qUBJoj6>voE^H>T?Q%JI z?u(#fnbd-K3U4&!;nn^PCt}n$$IU-2(?-s9!s6gWXz?GI?;^ z<(8j>TXoHRwm_s7@3(1I3V;ndgTyeIwf{vRx-<6Zzmu!>X&N zXGXbPQJF#}?K~=_b7EJJVN1Pak^9v_X24T1Yl4`g9BLz0WP4jZ20>*Y3b2VEv6
      1^%;kbEy)x%1!e{>m|$h5Iw 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

      9J%&UTP`LM`y4=#imtiCKi100?RTe1+z~8* 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

      YE=h9c6s`zZi@B7|3|JKJY7qo+jyw@ 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

      d5ZX`T zzuANWI)Mu~H{dnG=-pKZ6bhQiRnl-KXt!eY?#^ej&@}-Z3nSYF-aN$`)Rp3EuI`K67k4*KNRInOUKZo{C`P)l_0bnp(I&-iy>jJ>V=D?pl-$5{oc$2^=fZqF z11#P;?{39Loi4x-KzYLWD>Oh12=K&BtE3BpoKhvJMTzR;ls9Ir^83$86FfUeLP`wv zF;nX5T*I_(%O?bu++otXh&7S7BUz?Re!sx2@0L>LYpxMyWVfxE`1w4!w{(I|wtS$x zR6gBylw%dG%coF!zTy5I?ww-!_0KC@Z*qdbb+HH6=M)_~U;c})JN$R9b?4(u=Tbo# zr$_w@$~aA=0>%+;bE%+=)5A56R{PjEuW-4bjMKBe&p(YL`f|CTjMG#8SfQusIC3o2 z6k=Ck96GrwegoETmSZWa7N6(ga}Dd0<>ErRmUh1~YcJ=W-XKSm^%OLS&hTtiJtZLV zY*i#`1tNPFKOk<(qtqGLd(K%^u>wklaMI(j`{yB7SeaF;>Os9g>g%aWQ5?pLoMYcjb`9ZKuWBBPTdq$tnGUny^EGP$@0`ISmlilDz0y{*s=o!^vsQzc~Y;&T*s zAOo!3U<|?S1j?w>A)mubhfHY6oq6ch?#|RO#rNgP>7^7|n@uEGj-xtT*Wx^=~Tgq|>?Hi6{^!X}5u{Ue0HhumyCEy}a-l_sY{d zQJo~d$J0bR**Nv<ix>obT>1p{&n2V4EL#WH`AQgT)#tjG^_z=ZQGWoL=mvUaISkQgG4(pHnTTH>&)MS`Udy zLIy5$HE?Vi%Q|ta1I`gs6HQ2m0Y6i$YNY98l^5inUwil2Lk05TfhhK5_gb%=B;0Up zAG3CsoJSG_qFz{vSv^(FGXluWm6%=|qK(t`(hkzTsznAnT4ShbBa-CcQ!u38Kz{Lg z*tJ2ut}MPap{VzTZ9j{(DXXg;C4w<=%?vS=)+v*Fc1dsIo?YmIy_Ize2xz)aQX!Yx z+@e%Xp1?WQMElCb&O_CsG78^$zc=i>Tz+%nH)-{T{llCrPjz0Ivx%n|yp}2&=fpF7 z&L$Qp_P9h9s&-W$)p9<%_C4CynJB8K&;5{dsq=C7HtR%hW7E=K3N=#n$yNVr16UeL z{ZPhAr7Wlo`Fw1K)W6Fo$#NG>Y~VU7W>v9`nt+5Am*lfCcjR*av(_`x0{K#v187f= z_PlvjIQ}sA!%yf;;e_LTRpGP~EdKZpRXhF$(_`8Bynu#Bo)u>x^6_{@0?GEr^1^k3 z5S*8j)^?VCvvJmw`QfjG4_roWKI>XKHlh|A*yI$^L<5CO(+ ze_Wp>E1awpZiTZRZp3Lk(I8j&C|nvVqqua7{~Co$V`Y?{U;oo6XStM9M(K;JE5#q* zs+F?U6u;g*=?lK@$~b*f6`w$>RthNroP*H-ra-WEU({ucWAeds$P9Z-Yb6+Cr+5qwWe~w7Ds9SMg4~iSp4== z!o1Pj!$aQxcL(#pf%|Tp`h@j(=jecuD`xHgxI^W0w)ppBBE)?&|62OYbQXELa+2Y# z7sn27-BywLlA;g80wS3Y4B{tu8_CeKe0}@j8Q7IS@pJ8R!O>_?2kWyxle zCBTG9rObMKj^E@m-={(5Z|3`o&k9M=PMNid1xd61(l{&2d!El46x6WC?aB@b zO}yxK$Pv^^<6S`w_uL}Q0ld*c3qU0RJ_iN-b1VP+3F=v1{SV5#ty@1f@4uVOn^%tl zNSfDmv@rf$@E$eM7#~^&$!iDA+8&%o-akI=uYCFreYykk_XK}eMI*^mc_?!>YAqZ| z&87)bev{v}Cr~Sj`#6Z(%8-~_XcS0mJ#II%2&=ezvC7TOOKsG9dg1o;!o95|-Qsd{ zg*xe+LOZ8WCzSFq;TUs^mLJT$JG)*LBbT@;wZ-(~jvArrI3q!C5p~9;;($JbV1BCkq--L;};mRn$O+H_rucC~R$nC_DdY71Me(<}$f0M5p7;4~Q|Rf-B0&$0)V%p) zBdJwkIbY?KX+w$YQGQ`UVUAEk-EOc{mZ zrF;}*j_90xa0OoRj!I=apDT^%fh4Y0Xl}Hkd1b|SoaRzI)8M5w8eP)NISScBd=%)x z@yaNTCtRt|;Fc7PLOSsp<;@%Ik|(KwgjS;d4R)16vG`jfH7xH1{^k~oLJhLV1jxRn zsJZ3U&|W@Sh_yZzWqmTZs-Q(s>~z$C)QrTA1AUn>de4?gsH{!vT40fHHs8z39fyrp z8;-t>qS}5>J-l>e2WI*m(zjB57B+kH42uEP&mKYkK{>@sea+S%Bd?u_anT_zugIQs_#IA4#jd)ZN8f>P zte=PfoziZFUoZfcM=Mp24Br--yy8~wLPRs<(V21rbSj-eC+H5;AI-3O8**Ai=yVY+ zL^r*end#?di37L9#gr;}u`#8FHsXN!~ z+Ne6iTN>-;X3~p;M8Qk+SDBc>6r%TL;i7kRMncQ*=vMmZ4q3&~hImVOQdV)e%T?;C zP!BMC2VZHzN#&0Z&tYtMy{1WK+9t2cT*{U2|3DiM*0-J$$;>T|4%*COo*!FY{rt#L zb80%owQAp{OrpEw4ucRD=|>Dz9J7=uPvV3w#hY7kCj9$7TA@tZn|(#~5QX#(*uz$56AG zqG!Vx_)Wk7^JLm6JKMaXYiZSljlFk;J!m;o6V`s}=x%}8`{TwP!59mWiF;p7*s^Xr z@jnI4LK}wOCs~n>gX(!W_v{qr$(v_Ru7mpE zs2S5oy0%$-3Mp#!gXLJ&dF%`y4ZF)^W;fP5QZH;V!xi*&LZjlzC!_BzbRCS zYyqlTax{DR>V#5#hAPw$8XAgzkfHcDkQcdpth{n5ybDc&&rM5R?3_#hkFy1+tWD~i z+%lD2?$SOsxl3|Phl^u^ugA^JuKcgsm%^|5o4c>-tw;jI`s#5fN6-mo1#&?B%M^Wr zF{F67p2)j~X43}3)lFTmvLjYATlp==5B#^7&h=Y(Mia)LiBYZmAJ25cO_au;X-Ux& zn%(is6XW!No^}_{AnR_h^28&BzGh8lvhz_oFeS=X;GzawQF#a085%Ddg-ymeq_TNG{xrx| z#xL^k37?PSusw#$$3X~SUaMnykSI&8fhpJhM!-=&w(n0 z@1Zp*Gje@XgNzdL1;BfuUIXt1l`Ms*sGeRR&@DH;9!P$GQ~;8no6BdRq-J3KfJdT87hcR38 zIq*IA9cst}2|Sa_;9ogbgz#25A|nUKLnCkrksC?$fK^D{2p;$4Ff0@yBom*Qm+)e= zV|C?by zeDDJU z%UdBG4I%(8Njy_bTKYetJ5-v6B3ueEk-J?Bs1|?uqFsDC#<2?c8E(SMF^7c&!Rz2T z$9=~g{s!Fk=5s=%g9hBxgoFheU==v`m<$cph^+ij%6#(=@X%@lU|VYqTEQUtFjFW4 zrs!bGYt=FU;kf}$R>_Y<@QDieDcsDzfX|8QTn(y7UW`Fya$2D8^E5@^C{Wd*5EFm( zPvjN%jQAdtK0#;(bd{P!cQDb6%U@(agZXEXvY&?xz9gGCQ_ zz=Hw^h&1I4g{QjJSaIdR|%pH44)D#mdrnvEJ!{x0i! ze(PVe&Yx!$F^)ws-(20KRxOclzwzqNL(iV;SHJEmD?jGp&12f`W%?AVFeJ(@BzCLE-_9b zizRjc1y8|El2M zsN`~e86TzJBd1hv-rObC;Q^+o`VRP0fsd<-$*}qg0V)kVNN}DS%zC7Bh5`B~fV)w- zn1I{2F;^l5H!xi7ii?!%I`;ns2U7WdKR0s=`|;A&y$#{PK~Wv^k6JVZ>q=jIb?)!_ zg4Kii_bOZt5UV}*eEWMJ%3Cti!y~+Q1sxnwaBklhY|yE?%r}_V%mL$8%JOm`N%O3y z&9Gq2$OA!cq25cS4!7CDvx;pt0F(x*U}?f#0Z+sjZ)JR* zCfFX`m9JwR)3J_g!I2Q;8=&UisEUmASF63UQ6}miipYtJ4|ESI&1RfdDvWz_($hKP zXNz=m{78lDN_1`EQb|bM{Oy6k?+z_ZU);N(q{GuyljqiNdH(PSraCrj!;GzGMv7Zz zZ+dxuQpYXLJM`?D)PKN;OV4kWA1)rU=V_qXJGy-Juboe|y7tQ0DR_Ur`?23_DpY0o zz^lV@io?Ub{QLkw=4bHIBJsN^sZMu2u5E=zo)t{u$q<>;ShLN4mY67=}*e5uERx#K3DoW-se_wUrR=ZuHEvLooWK~${elu$Rip-+BTOr)xOn0z=jg=2<#<$7 z87j?~->_#dM+=|Z(5K>?rA4F0l_m5Tet%T|&O=w#vb8S*2sq)2*MW5o`6K!Ma|6f6 zw$3f<)O~5`psF^_+qLL)5EQxMUkVbE5eW@}4PZzB2f{hT9Rs%fuZWjW@Zi5AU4LTp zEqo%x)ph)%THJF(v46@mF|gSDAPb;N1(~ypgM#2e20{)Bm<`ztc!JK93g}WCPB6s? zjB%360Fi9f`O1Z3 z-?GK5^xF4_Wvl$*x_v1B_1;`FZL0Le-}0l?)9%pPkgUt)C&p*L=VN~5$5CI< z>SvphF8^U!eP^vsfxt-|DV%qNWJZ?J{f_tr_f2Y459xNShc{Hb1dAw?YD5FwLoM!7 zRYXEDw%2=%cWpV9Ae2jCVWi~;j^Gwfd-!iz{fHkWv<2+;RArWas z!^Z0T0)>D!;lL}EVyBcAdmOT?-&HrMZ&$B90hP~Pxcz*G=Q=tr;U1z~PSmU7=AOcD zZU_tsU^E;zM+=NFFP>09b>swAnv8BZf=X)}_H!2x_tj@}?qLryST{;sRo?rc zJEcr6=XjPOssQwjK>raBn-#a6Rl#h*ZsqINfMU^P&745;v{o#y|KtUu`VM-~e?+GN z>*l`7++JT_n>BrS>Ds5*rz2)0w67k}>*b>SIq9+OB0GJy;t0!q3y7Cfe&AZeJxS(g zk}}D4dLJ(z2yVR^cwtQ!fOw#Ty8`zK=7my@dSCP;;PF(uWXoUj;j}XsAq_tg0wd)+ zW%7=9KRLNzV>=;#(l2im-@NcCi{Er$?p(R%qN6hc6ry+K2E5tv{E6ER{LsZEP%2w7uTRL zmyxU)J=7wkAYfvbHKRyBMN7sj`6L=tg4>ag{ioiVX5GDW{~h^b^U)pIlM(v+U}Vlw zWaFN5>~+vx4a_xl8G3RAz>-GJw#E<;=!5Ie$KVyF^7DhnpeSc76Y68xO9W``q!-k;B(c*s$w0`OA-=x+eTynVMsrKJD#N zo$oL2pJCaX=gpDpUb-K~e&6}tz|RkTA@4lmB{!EoJv(HqN34{)D z879eWP@{03!_yfIo`7?00(eQ54we}RLVB6)yLZ;@3!J-}WjR)hgV@VGGxU4H zup%|!+%XNR-bq^ft3)5YN1)2j(+^jaCwRugi?|sR>D(vNion9c=_B5`%o!^R*(1OI z?9R*b2Y(IwarlRyc+9#r#aJanyZpf9V>V^7$jW%)#E;I0eO=zYCZ*oQXS8!q%jm{dMWk^%NU)MP9hIqOVt4O;0d zhyZ&c-I~z1aC@*-%inlm`mfK;pVg~0DC27LmeRyNH9dl_hRptX^#>^(SDHWEw~IXo zXyMvzXKJfh?4eKn7rn+}-`cqN#TEDEX{QejDM23HQA z;`^FE#VrG8RT#zpoQ8o*=8}cs%w;J+zy@|qldK`dz936Su`iS-npR10UU4hM=?7C? z1vRizTDNZSqmvh@hFewe`M{4}u1b5-_5#;;fa~xPU_Zh}@k4fspPv~eA|^9TS+mlO zpuy2YCD~-ql6s=x_c^QoC^W;v-00!KIWGW;`^;CnxbF2rOb6h~!Qq%bsFA=?8jNJOc_g7wE=&Q0ymJhP~8`HNY?pH)Ra z{33rW{~*^ex0P#OyH+(^x^dM}FV9-zd&ZK!ge9;)n3rSw;e&VUr5lgFUpW7W3}>N0 ztEIUKT1j?9XCRx*#|vFae0)4q=mKN(2xxSLar_Kdf&{>;Xs>{%hTa=a+N9ohpB?)B zPx5E-b-8Mh?EfOwx<1RU-(I`n$7hG5L&c862Y;y-);ds0>)7EKvT*J(qJ*R6t0|uv zIN2FSs;l+(b~kH`UT*F{OQ-BglKjr50oV|Try+ydwQ+fhGH^H~d;ii0k8fD^jBmm3 zLv%uXUY2XK%I{^4l83T`-JSbYUBvh69_N1j6ekU*u`vd%^1^;C*G|KpexIHZl2y(e zMpv!^=+BZXxQ`E=HZ!~=q*2;D;da$}!j+WB?GiZQa1|g6kUB5`3}MDEXuc88Jnzb9 z<%<3{3i12s!y(;#m@8MX<=Bmnd6uzOIXGFf!67f$_pn5~aLB#9V2GT~uit0bE{1Q9xV7}dN94bg;^!_pCH#01(hrbMF( zJV+Epn??oNW)#-#D!f+x^nTW5i14a>|KP0dKlGOGEoQ%=(auu25*z>DT1>NQ^OYJ{QC>rm8r!oufGOyJc+dsdJ^_j00$ z1%c}o1hFt7P(J)8YxmOig1Efefq?yv4(9hrBuY0k-zeiLQ{GU;hhfnun;JrMyFyw6j1+MOdgnA8;Oedbo zv61$pd=c)%Dw4`Sdw1S?`H=kM3&-;dzNmQn*c)qhMQ=KMcHC2MA1JB1vtaMHQuT&U z{3YYo7ry#ED*Ak@(X2VN8DNJdtrP_Bt z+0my>N~|J0MWcM?9z0Gr91k3qzd&0am$-bGE8U=7hWNo_@dV-|Jjamt5M22AW8Quz zKj7`h2^q(KPB&tM|K9mL;g?W8IQ{-(zIO16OB=kK1@GqV=1rxGkKN_8gRz0Fu4^1U zG$=|9w&{d3<9g)}?>D=TeBqbPc8`QOHW^J|tH!L}YHoJXK6H*`bkuA}o7_iO{^yGvnHnb|GK#B8UlU@n6l8ZD&ys4vS-72hW z&5}sK*_g*Y`OhDU$-X57~HIwd`#fQ zp|cNXi2iYoK-59fJkArEK)ZO>jl#b_`0pw1H)RjaWrDP)U2y@l6WRnxd&qZ4dk+un zaSu@o?1}#`X`d1%q70Y|6H(Oscvn6rUzH~^59o11Mz!$zre`V_aCv{T4*Hv8JIVXe z10nEvcQ_68072g;WI}~!7}Y=$QLDWLoyd&dXb*>6cP`8nKrJ4^GM5 z`=d{uExJbYlWLMwwsG^MO0EWMKYHY59a!r#f6l1V23%L~qPxO|*he*37cl$mf_M5oYT=znj`3|0CZbKx`s)tUf z*L!)3UPcpGZjvN4U~4MQTrbaOSNXKTB9pibBS+&Cot(5gcF8Bd{9FE2EB{;RhQ@5! ztfKBVb9ekc^Rr1W&z@>^%$IS4S7uit(T zcl=uH#Zy=rZx!mPfscT*F{mCAEnN!+l~h!L34?d!kS& zcawhrYs(hX~0oi%Zmkn7kdtV-KZe&qq~mRw=eyqP07+5kmjsK!`B zry1vB6u$oe9{m7rYZ|@%e0;*-B=7+)m>-bhxsSlPQ4|qEEoM`aBT%s-@v`n@r4_6hH9NKeQKK8HQ;-_4%I#XFRVW9jw#Yc(iB>2RPs%DB_pf-hvo48M3 zr3%SG7|9C>!T-ajPfDAb(4U? zn@uNz@|J6P>;c{b&k&0sfT4oHq5~R*)2+j$F_Z+8!aVRxF~xW}02k0mlOYc%9Ki?P zKeTzr;vKuH`uFL#A@`{_%icNOYt;uM2hV?Qy<{wSan7WTT~dd1X`j|6{QXv8YZeyG z8P+W_zs-nTtSxbEuqK+XE#e?L$GYWK`9qn(~RbwLvSd+12oxT~>b$r?~)J zOa)eOXge0bx)nDI2uKamr&{a=@|%ZS46WQH_pIVXa)~;9GA`E)@mUSzB+n_1jI?@qsL?9NV1>iZ+H})2 zt`Ij6X-)X~b3$SQ5SLWn2F;gkS~hdjvu~%JJoDC}+8HH7<-dL#xWCiZ?K2mb4%=uK zR`u>PDR+Cp!so^<4%AwoDcOEFD(r00puRa>catu|^SpVa0NL5j@3(90@Ye8bZ6P^? z`&nFR-*_8}dn|z8itD9n4?)nX-1L$YJ)iU}+~bgC_>XKBQJe%_RAyP&A0Iz`=g!S> zh$~!loEO3zSMb%JI8F7t&^=?QG#I`OXr{~(fVfG3foBuD*uphabgkrj68MBzZN=J8 z>4Z?$OXQ-|;#ymKSEP;1={9(t3+Yb_O&V($8eM~#wbNLe#+l~J@wTLn>Wy<@1C zde?>9EP9Y3Etw5t?QUNZ^F(dkVPQj$L3MlZawR)nEEXyO`0wNzS`k1eM1C-H%f>zJ zAtDH+G{WK60N6$iIcX;R5j17&;Gml~?+lZ3M%=lFD$Y!H=+Sm|S+-#qewt7tCJlp> z&*v*g>q2#X8r0t5=L((&|GqE(Ih{U29)gS8^*r@&!S}uS^Ue+e_zDkcq@0W$ogz zlV5C-zdbVSyOGDg+Qe)}OD{X(#tnI`a#JbWR`Gh-xWQ6cz#qpC%b#uWl%v>p*1t|2 zVy)jm$J0meRln>h+}BRNC=d3S^3BX=U-ZViBCD4ADS-9?pq;5Ix~t3{&5m5AZw59gFLafxBlxOd~IIgZ)wrH`Mk(mQ+h zEV#48IBo2~mczi8!M)>Z>(28g9#^ZzDLs3HMUKHGF|+>um|a!YiBp(>{blhF2?SzjiZ^*ig+{clx>_{ROIrQ` zr~L3JbQ|K7k2w@Wl$YhjXLcdd9jbOVTO?o7=C7SsULtimUZSjDD>NR$OW+PJ!X3O4 zd?w8W5?YxTEGg1m7&>PBro9s` ztbG5F|3G<@UC4>+HOhDEQ3KL zfF3>Q2`3*VO07i$HEF{^&?7M2gdW8tQPe&rI>}MCoQZ{Nb)t(FD5Z(4Zdg^nRonjf z^3Xot*~~L%FhMh}Ege@VEV^|I0b@DVf9<^8Uv7E1aFj3_GzG^*g!sHNvVV^Z*&p-( z(;719BEF)yCwacWDId-$m=jR$TudU9#Yxf=3`!*SH1LP5tepDh?q@EoI{u#T>^o@# z#^~I4l}{bOnKSX7A#biK8j8**Dro9AAdX8_oK8GYj%V^4D;KLIz)6jyr;3EZqO4H{M&U~tvtVc#=Jk5kDCnpUZo4ccvBsFUJ#l7BLQn?%4(U}kby4#woY!)Np@J45JlDLlL|8E2k@)4uh--&yL z{570ou9&#W$F(pwIWh>~_yPTK#K)50w&KLxCBEyU_AW0=PHjKSzSdZc_I7{>5ndsP z5cP=HbH}eay>3a~V2A(ytyD`ceAlZrb-F7fln{DvvOaE8H3*|3N>qbrxQ^z^`@>s1 z?|LO#q&MckN>*u|-74{7ut}e=*m(rHF``eAqsGpR?BS^kE1CMOP1Lz^{3bhlJxU%b zl#gydwPd0Bt5ay4un*z#@|jlk+4tL?ii>sZX%N;x7seY=W{wp)R-23g!`Rao7Vjxhq&^xaIWhecUfltFv?^X zZd(%s=Eq0Tq9V*XVH>06>arGn3kX9zT4 zMS>c4=F+`0be`pH3ywwJxBJmSync#ZUFe~!Z9(!Y9w)@bxb|gL%+T_)J zzm*+Nv#3%?b#Oqq$2mYweaK6}?HvSRm^wv`gBd9vlTWYz z3tiBpOxe0FAA?WF= z)|kA!jNaaQokpio16_u~G92BSJ4G<7u^peh;eX&+q?W=!L_vy^4Ahhgi7YEtJ{@p> zw)}o9OYs=Y{|dZ6hdw^zCU}H=8Z6IaQ-VJYVQ%+BK5xdR%5$529&#TPu43neO_CdU z;I9t4Umt&Fj*Q83w0lUga=`5l05vcA5 zT|yXkB>rAhe+QMrXECZjGe<5aM<-559fh+=h3)f`i`pHn+&!^+PWhh6)wOl8ZTh$C)24_XpHMx!eD~z) zxoX?=??=`?b9+S1tPS$HHS1SwX7-h*C z8YW&FJ7?0*qg)@p#agUb3F&fP+$=~u&I$Y}<$JM;e~+j-RtNo@grU5jliN<};)0e- z&Q4AZEu4fjwt2F=OJ17Cj^Q`ZqeKYiJxb8=9qmb|NfYC}NrYhenOYXMX7@!wkV~ep zo@`v6oPk;K&vj`E&Zr%Y<>9`=$(O#v?6QFKA>ebuNfSkZ_9u;odrf$B>J-Wd_t6^@ zohwD1*bco{EIjh9S9y4fYCWov64TEm@N@H6(_UqJ0q`!q&?`G@N!!&!g{?Kq1{EcDl%J*)3`h z@2#FBfMN3F%Nbh1}XaxQZfZXU& zENKI+0oI2^{KDFiMZV8wL4IS%X>2N8 zZCSlw?ZMnnkNMY3Ub|p5mQj@gy)hB|)57b}Qq?XaG{hcZ?+yHg9>pklftyOy>-_ZE z9>sc%pQ%@|pTAS%CrgcY;&QbV=bi?@W;oIJ!xDT=39f2mXMHN%(=(?c!`lq^--i70znQrY`V|uM}LHs4#r97{e!ksskoq6w(eA{tZz39fy!NSwaAic2Pq&BS^_e3g$bvmJ*U7zk@}i-ty?^ zX{pPJ6Pstu>;HPiv-9P9J%){L(<8R-QuVyDx1TN=8jFUSgW61s>l)cxIogkYI{wq5 z8C4%vF4ygtF|YUhUJEWRu9|*kyuCWKS8d)hKcCrfiVKwcDQ-fiA;Q_Vp`U3)gr`Bo zzh;%zKh&({)br+vPMHpDedMKrw}`1|&_y)Gh4L+EeayZl$||<_Bqs~i89g-1++SU} z_DyuVt6sl))=N7NXO1gs)v~N$<>=wZ_Z{E&USQxFeRFp9wb$QRx?O%aSiU}dr1;mC zZiD1iDQ|Yz#=!ZTlLlutI*8a%&Pa+0+rEdP%?ECPd@KA z$ZufS5Mef^A;TQ-q1=NAH4?n%J{320Zg3| zudHbJm1r`dXQdB9SnPvkCxxKXLi#R^wCKXtedm@*nghahA-}rXv0Vt9C>J3S=$7E? zh+`Y4Ij-Y&xQNIHueD{9aXXM#?y|H-%7IJva_j^tC!_}+)np1Z&eslf{d-HRKUR<8=dePg{ZOfT@ z-D~wLUz8pHlGi3>je0)%m1l(oKq%=vNxn(9Qa`ItyQlV&z_dLs8grc zdS1HiSXOl+%5O|Y(foem2Ki4p{l?jkwz1@OlMWtf-r{U{bNSArzgfV&E`6WAIQcTP z>oX8bsEtQ4vKQI6=zpVReKn+q(1mKE8f|FHVPcf9lxdfSJUSAD##g!W454>VJ?h0j zpSMVAU%tel67IiF_xB~)rl#yP+&}wOk{WrNfYu~)my0u>Fzn4RA8D9l%%4(~Y}1_l zyMuQ5g9`f1_4v&K{H7;liw|>0>oU||i&|$XdBctGbZ?lF7{j)wc%o&!Fwn6_8d3MX z;OF>UoFdy6h?SyY-baq4x^uYO(a~;-6pYT6!1&zb>O}wr3%`z51Jqam&kU{qUG0ya zj&3URehm`aBsUmVadEWCxqkuvx}-1^APC3S%D?Pl$(Pt)J9WZ;-f=8dBh5=h&)r&e zPYE6AAb(<1$lN#hMW`h=U6jQlx`hP>8g)1|P<9nNL+L%i+sL>C3{(UX@C-7OhuG;} z#q#^|dpJtnb9>F+>h`PqE_mym+TBy1-97(}y6U!Ntz!pu$Smk9%uOB=Us}er`FX?9Kt%jnT>Q)#y>GRaj&pfkn6TJZ%kfR{E1GLwsL ztTzedhUPX&TwGf%D5=WqzHetyPHx8)yS5MQ*ioH7c;LhT96S2F`S}npPPNMkrRs3_YM+T}`JA zrvuKBH=VbhK8Y>U^aD=ZKX#%P`5^)8P+h9rfE1l_cBme)9386r6tqmLN*TGl%ea1d z{aYtjw;BFY=dlCOw>q&pWyDLFlk@ub7ORxL)iz6~wudX5MTA=ANtsE9D*_{%`De5{ zGA=YM(nLE+wMGh7dm;9T$eGaxS%N?(DfU)t)cM68ZV)qZrk@7(Hpl0*%JM!^SC}r2o+Qhc+xxAYNWPh>y@*epPA~s5|&k!~8 zOQG*0?@p_im=};77&xf(=?1?}BkvAdIR((C7RG2t*A=0IMz-+oo;?rP_G#?Kae0gU znRB$@rlWaaG&EWNhtb>x8V!Th6$u9%IrR6QJ~a1=~pm~M$CcR?B0|q+pnM9`JUT3XM;H25bLty&=tC?d&qo{ko+hfqL4H#u9&Bf?E=C1Ej zFS7-5D*Ls*hX01!Oc>ufn^f&hBW^!q&j1sMzeRSrQ=Ri6RKtiN$9V77JJ7JCtc+mqR}f2Rrz7!stk&R z9=EnxU1CxD!s2mYnv9?H8YK}Za z9~^5!e?g;PP)o@xv`t%d8$@wdQacGQAS<*5YohZn#WY8sY~CdsM`;3VS$G)m1h=&e zCllyj!|4S27m!vaAD9G|$Ry}nNz5nFg1aXvF)0yEym15J59v;@9LQ8ibbU>K(@jF3 zC(-Blqb6;DHUxIL8q$y zf2%5ws&ywS9Nn1DqpM6O|IT#M{tEo_=r}XfwXUobjxxg(=JRk%CH~RK_`$2S)z!7N z)z8h9C)VO0c6D3D_*N}bTUV5QI-_%|h!%0Fx$%)DtgKB?jDKO(Xz4I(U3u(SrTp2k zztQICctyo=`E!~RW2>C!ho(@pZuY}==p4Gj+s55Bf0CNfuk=rO{rkS&v+9`qDxeFgF{?N-Qr5g8RN zRKXeE&6}BZ&BArM@Ma>sYH@Mgr2;;{QgRp7;3Hf&g$GPr%O&(jk&I{uD|%^qqu}l@%hgc z)vjsVVps3>aY@~iGsowq%6HRqx^>LxmIFJ7_ao>^Q8{Nnf;<^T`xHm<^K-@JTrmp7 zKalHy6Pk})k#@)*Z3PVMj0{`L1XWmA0s@f8WL24g)*WUJGfQ@RN_MfGJ=t8#<#*w( zBrf&^o*I$VhO)eD(AQEFsYwlmVceLaBKQt7LJ%ctDI?6uBWY2K_vAmf{_9{svw#$H zvQZi`py;W<(7?ru|DF1`eD~Ykht5dL?T#^PUeomJ*}bnAiM;T+`&PZsy0m{ETYH1& zc6(WV%COSnma|w_)>eCN_x8`_zyC-M-^CVQ;3@nkTFQ6vg>;F{@HM;JY$|uJ0IfSvK-^IT0fYhk3Wg?$~TnKZ7vyz48%6}Faij{u|r~*k{@JbzpmOmqzw2JC)MBDf3?d}WicS7E_`}ly7!XIS=3oIHIZjr60(M{>a{7TzR|$Pk7$^^?oms!tag5bKbMl0=He~>9 zkz+5yAs9Cy@ncf|nux5Xn2W4tR^`~L>he)@Yum@Q>X6(fuD!fzST!&gr%xXVyv2CH zd(zH7Ck+(~VY!nJM!(lrd(=aK1$#Q+TXL~0h=8`pHjzBt$k_`tie2lMe&v}ZmGUhX z>E1cpFUT(?KB==bd)-TZ8(tcHuzhb+%MiWM=x>dT!%K^#>uR?_r)>w^xo)cN8TRaq zPM!Sp9gyMd7M<*uoKx%><)=>oPFPlPtST_vtT$&B2kXgBQ{2t2zZ!Dj$Q?r}q^QVV z?xAgT4#MpW!QuY5D ztSxuFF=;S?;`Z@1UbkPn60>*dpyUq8bDLj~bFVbtr)hEP&dq~8yC!$))j2VXv28f)WSY;m#)s?z@hUs&S*3oq`lyqo{Oc!28!yAYLdn)BR7k5B;# zgd9kos2DPMN>a1NT9(sF*Z~`pJV&9(zeTQ2D3rC7MEKyehZ~wCoR3^o?zif_wj=&hS|l7{eLvZH z7!(3CMZH*h2#Lih^biax1CS*QzA8Ak)G!IsPb-3q9PywK{tXvdiV_F4!Wco-$BhYU z!m3N-vWxtFacln8I=^N0n~(mmm% zRd|K_nrk{u(^=IEq6-F^{`81@aBx;T`SZWOxo19h_o(I9pp5-IKywpMXO^y zIu6%=eJW?LIJ<6ANxSdgct_kqbWomc95@t;OgXDA)EW@#Y08EF&*C1cw^*p96ycr` zlNz%v;q(BnD6B$49W6#0=xgj}n__CrJof87$nvLK%Lni8c-P{VziVVe>T&!$NRyp9 z)W5C1uL8FHqkfRQ%&|i{RG+9>1wGkgmj}XraU^a>@}TWZKrg7uCawgt9TTSO`S3;{7QCg6nxgaV2(KuWNi?0LmH6NS2) z2GZ%|X#87X$+xhsW=9y59Nmy`MB7sc8AzM?bAN_UF1g#T~a!{r8Q% ztl6<0lPaQ%QpO*cJbvQHNkK{XqK$oeSAS4DM6GHOx@*W^KcAGR$X_qmGq`~HIG7jv z>h6#o!7(4pFCJgJt!BpkvxP~y1*h5S&lWAjo*jXkoUpJ6{l?o4)lB8!f_o@`k1ZtlG-`TETpvFbmNJH2?+ zuw3>FTjdyWZ3A1xddn|6?p=WAtAwN-R(AnTtP%ECT!x<4s+@Z4hI|k!RAr06OeI>-f#F9JCJcZB+6z(=b!iG&*c^OhXxR#YMT)xcuE$N zgzRWZ@-#7{$%x7vlim}>XM_nu2bj~sml)p}PU9;O7Us&ER%|HT$%yrWNU=#Ox0ojX z(6M6L8~Z1JxAMe6|A9B`H)C(bvSwFH#`x|ipH?KUl5hCG^5VpugSJvi_d5sApI1`w zMige}V7;=i6AR(viNsC}&>$F!;@{xlfIu<87={|mFv$o^1EZ@FlSB>qOPri*3I#%; zL(utHF=QC2y6R8glIv21jA+MUx6Ld2ySq`b{%jPie3p)m{l;kT% zK5CV{?fuA*a}goHp!3d1b{0cMvaEq8;5CG03%%}hWLifM#Q|z6c0$RM)=jUq=%D53 z462YOnW&FbOzEgpods2eCpUvUIxjq$>(qlS8nN!=SJHK!&3Gk)1)bP9FRS&K&LcOr zWb5tnP-()j_Er5Bn!o&@P|0ch_Rq8f=CH-H-V2GTm>w2$A{&|q?Z+)@!p=3R5UDk& zHJ+kL>|P8Y3ynyyvpCy{#7SZ#Uu+a1Aw4=HFp5H6A3WU19l&8Sy(?wwwMH>9xzD7(T$sL+?YHQ|I9+xf$GY&@RbSBY0Rm zku``(o6gAq<4eq-iA{viE~dVJC9`wMh0&RE-LJy@*FtnD6Qq2kN1v6G=npcwBaclU zdlow!@>H`CZ)k!~4YdhYcMp@O^+GXv05x9p5SiKs)xxTDtJA|qFZ%eKQlu2wkAx*` zgVTs!SXyvtQK7uDj!lz~F1X2(ZdS9otdL2Uek>|zAL1qjbs9(S&fkBZW2;cad2nlR zr;ORBK@+S9^$Bpm1nJW{!{4F<(k)O_vWtCvd~_zgUeI`mItvwUDk`RuJF!4Q zysY0wm0;?9q(@LDs-MN*qnW>`R%?NRX4FF3yK+JKvT#=n(18J+l_DZ`%$f;S!dZqG zqBX)U6%ni|xSm$IWW+B)(!e0O-GB-0-GXoXYcsp+=KZ?Rv)|~HbHWG!b^p%p%$k$u z$*wL~BnRsHuc(FV{DWy_j-kT((&=(LaRh_wU8rA)UAhbW3IK(`FE;r~zPZJL5SAJX zpeZ!LImJK}Q^XTjc$~)`;4aCJQ)mZ)oIX=n`Jry>r+r}&5Bth1x)!$9#e89N@6dU~ z7v)`xVz;sf|3T?{<>JXcY}n}0@*1D)rz_=sEVF+PNj9@Po%+k$gq6&TBq;Wm_5^qr zhI5{n5$GQ*xg&X2AMWn1@zRQxK$QqUnh0mpARKbnf^r%m)x+Qm$1>6ub28IN%zTWO zY{&Ud9p!_H7!tCs2T7&Da!T3wwno!UtNRk~1;4)N-DgDmPlaKerytDk>=Z_4iLa)9 zD-etLlzni4_*z&cCpq~_`%p6rd<}&s5VQyRgLX6#5974!IqeoN8%ji+-2ET4(-wSe zBQ#+%8@4wtUVf--#w%yRZ?n9-Yf-#6@jI;x@w*WG{_7$5J+Q>?%)ahROgH8{Go}gC z(+9}gIn!DF9ywDg*IY&wZI6uR?b~!|tM3@n5n;BDZ9GEJxYXXfxxIUF^X36r=zY<> zxQ!H`?_M0h<4D}yz_X|*ZHCey{S03swsaEvhHh9_iK&{r*(ih~Q_>P;(`vbI5N$}v zr-j?i>GOtulY&}QbbKHfIeHSi%h#8{SLVJ7_=3|L$5v$y8q{S>mrfIRzqjIzPnquG zmZm@~2i}dUTwEU8vv1${gyziy!@K8K&2!?iyit4hT8K}4o1SX5?R1nR&6}`hRe12s z$rFYio->_5S|Fz6wj+mR9#iwGVIOMLNmK|&CDrI z>)JKNBPBMwI3?WR;q3=!f>(~oBM=$LIjFzI$$`uRA7T5(&RdYAavW>FD& z?N8NKl@6-->{3l(RnO%)mF>C=f9knRCFs;L}*CL$NyQ%sfF9hb7P0lmac(l!K zdwA^9K&{{8zLiUhf{pPpc^>wIc1fD`bj|Wmb8NTvHM^nz9>U({h%0Oo_r5ss?todc z0(!85c#j+qj!(c5?*jlC5fGqQpD;dkjmD>wBb0d8#QIE7Q3%_G(W)hk)+Y?lN6hN5 zzw$?t!%MS?Wv}|REn3XJ_N3VuyfbA#I%7Kjt6qxlAm)u*~69V z1nKPDbn8*$i0Vf-025TRW)Q?Faugu%he{>59SIl9SEcv0D5#iCX5+xE)E%?Q$zx$d zZ>6}awej6vN*`F6+p$H2t#w+kJVqug*L~woELg>oYMxFu?()h^t-B1{PkAr0q=cDd zNr{uyuFh4iMty`=>QPO;Ts&#QUX>>%RJ;SqFDqWTdZauN;ysB%9nCqD9%|z zyXT=IJLM#yyqHd;uN6Kk{2ySA20Ij7JGZW^$?8Mv6+RhT{!vGzgYBfpR5k4 z8N!jT9G2KL&uw3viZ2>!-Fkk+Q}N=IU*&1P2c#xN%#<@t}6ABoJtTl^o=z63ssDqFv9Rd*+;tergs2w9sDl0Xt@(@7vA zU|5W734{P5A|i^2h=_2ZTjx$Ywc4@Ru^BUnLTx~GdVWDhX7{*cEPyp6 zBzp?*-DSaWoLi6_XUM$D-k2!M1oS6mp9qaA)EkME$jSkGlZ>DyoUP8DfLIV3Uwrc8 zxFO!s3gfXg#a zqX$;yoKtlUrWLxLshM#mUNNSucVX{HjhSpFheh|Pa@39(IAU}||AAem!MhP*#mo)w zm2&KZ3A)bq#-On5EID;Xa{uzw8F}S+g*xC$4=6*w#aiuIGxtbQ0B25`k@j_cI1KVKG|2UXv;0kwT@4_A!$N(l{+rn-7976 zx$U3XlWgm#6?@{^Ap=$7ab>Cl|B^ZO`_`>Ht*ukXKlg>Yc_*gVWU!-HV#&vj#Y&v; zJnv<#8iK2eimR#YJEEb|TU{Ml=IuYC;aTq+UfnA%B=6|5NS&J)BaD<3M`X{qNPIk; z9T}IFw^M5tqh&_{ZG^p>Gr8u%8B0h0kdj zZ43s@pLf;S)(twTa`$f4qO6n)GzlhC=K2pZ_>-o+|(OK*9Q|w|9SG zJ@%~Ytp~FDWX-?1Ew>=o`g!WI-;o#(p2$4Eou9+nn;Qh+B;HJtX;BJOY_HcV|!nOsyfWSHa2Y2Mt5;TII;RgT7Dwo;QFpJ7kykMKX@w2B}YpMGFgVAq6juy6^ovB1AwaqaD6E-$|1YS$XQzR%3-ZkyO6)48-FBmL4D z*|~}C(b)yr58{NcIoLln*EJN851jC|9a|;4y$5NBqQbJU3GXRSpEGHAX-RgE;yH^0 z&JDxH7w7iKj7sP=AahI-oLQyMMlFG0Eiu~>Phc&H&H)`S64F+{`m#CMosup5<9zka z{Bb#hgj2eMQ$}KURX*1AcVJUz6z0{vwSidw9H(8N&DCyu-VrHpxwwefnn*1%I;&s5 z^uBpLjWW3yi;HFXlP|es{PYn+e8!m2wK2m6jUMeCcG0wY<1)F{4fkC(J$AavpFV8Z z^n62uHOAINOUf;L+g4nO2TvGZx%}m=0F7z1ZJ#N%fF<`Re@C3sUE$ zu1aGE2~shQuK}Gs@#cF zn&Oh2N!%=qp^Mu+wZ#7C&E31>cJF?3_f-4;@b;B8xoo7D^d=`mpFPSWi#ym|jp&&- z1=nOzS>}_51Q5OWZ+!3R@eWjB_|E}2c+nf_9-edI0Jpv%=G?c=KD@krTx7zCj0?-+ z^~{W>yczE9Q!-Ab>E3PQhdqC7fjf6b+&N1|J96LJg$A;PS@SU}tM)gE``~B*6 z{a@caq@VDIEqdm$6>aI616t~_X+XXyU*dQUdqvZ+^8%5@_@s1XAn84_A*VXSOplGt zawjE84xrF#+~Cp=yTKBJq217G+(20xl<&-g8E_=y`!Cvk9ABB&+;Tn4YRLIW-6HhfvXPQqCPk|t9_RWy#9x~SDp8?UZXw;ZBLzu z9Y&0!IWiGPla-Ou>Ta?!G8!u*VU7q{9Epu}L>OJxM(mI@0~PcMA#ARW1Q#C8Tph{8 z>c}6gyS~1=;LhCdb5vrXb*ymqSKqW(%zbXl!fWldk)iLbTldcAyRH1t+Q?$8pdH3q zjjWB7SNCv4yNtx7MC8s$N{UW#VUfh;icZm@u{aVPlqX}>os9}Ej$j=m_~x-)(%|w) z*ToUN07pw&UtTfyy2oF-`p@@n+m(Fln(Q^DM=~4crfj-w(L`td+Vw9&;CcMh6y&2@_$xz>j*w~TlomEXIypE8%9>#x0I?o32)-w}BKb&4 z&_7~R;och=s~&x*dB{D(3$tFD6dsvckKDprlOi6tXu_k@CyvcJ`_9VYV;!^Jf9XT3 zwQ*(5ZQ;)aF0p312EF?G?N3-IS}vU9SXr}tj8Zq@!x4o%8=3=Ou!@IS9q%$Dk#WdlLr10yMDw*IXE=5j1Ou<36#%S9cKzzpD4wx8clE{kDjfe%p-hkU z^K`XmvpTfP`gXI0{Wp?fTyw}tl0AgGA`skyiy0Z|bi_NsU``_*J1ye7+u9J+2+AFb zkR{TUoFZG;;fIX&#Z@c6(1O|La7IyeFbeQwoGFqdfZ*wl$y}3n;eeTEinPU57L6c(DBJo zmt!$PMuh-V=ayJ$1ZHs%bFhiY#{Da;r~LIZ=HBUlMaO8rtmIQM_4yn%0>Fw-2 zq9MZR%nOUnOX`so@727+8<5qxXF*!Of_}pr3dBr=wz03MF48t{(_q$8I}lj^vfDC(DT~M#jX1M}gMj zjcg~>TGlE#P_oB_akAXd;9zkDZ(ifGzbyN9(jw#t|2y(bOOEiw_IXUBd|IM#YUpBz z9~v4XHXnh_w2_*mq;h428<;O)9(nq6Ppg<6GW~LFAoj~R@WY-Ly z?HF)M+mgLv+>(Xt*UFj|8On#8lgrf;8`O%)?Z}tWKKx-d?iN+wJ{-@*3&XJiy-Sd& zW4zPta=T)~9eRQzG73kq>aoZ`iAak)Sj5=*WLavIM|yFfDT2FbhDY^Be#Uv1p5xE> zD-uPAN2zk_F|9rWszV&GP@j+PSOWdZWT}D1apK)dZo?U|725|}atip`N zNAH;OJ{$f9Qb~k6-LfW&v9#A?r&7D^my`5e%#E81WM`jrez0}?Ckp*Q=kc^!D4;N7Jn~$1ah=bC7}sDMZN^fO%O1tlxM0Cf?NO!om zYa-E;^Tis2$wbi`#F3D-op0d;S-`~-Xe1IkxZ?T748G>=wRl-+!6wpBPcp-t)2*M5 zb?t~=m@nDiJC^_J_sOWsYO4c%kvDyUGNmt3Ms#d=RFdI3x54N-Dxt2}o&=s0%!aC; zlW(otd0Ix)Z6{}U_QKM_=A#!G;`>Vu31kB|O;^Y1!EWRTcXxT+!^A^*2Jua}BzUr4 z_ikqRvtRf0{j$Ow6@OP|``0{Y*!bzz>d9Xz_gd@2?Q5^Tp?T?^%b&b&e35o)v0?ozKT>JeCxY%(fgj#Hm$p^Bj|+FB$-Z#F{U~RC)*@BVlrjVo2_;QTDR1=_vkUDhFocS(KuHZ?X=Hvh0||uR}F2a zm;F1Xk`hq1*e5Fq;xjz$T=w+cxo4d{a?q@GvnDUHtS@(|hCer7J$(EHtH1R>ygDU* z^i}(By!}Bd_ln;&j$LA8?zQf_BEH*O>C<}hh$2&MK32RV`(|-zcB#9F7n6m|j6vW0v~J5Phe+Vp`YnBwrAP+g`F)sl99Qj*L$$D84ske^1m=C{b2D4=Zr= zGIY4cT$d|kKHxmDetI7d(#v?xn(L4q9g)~o8)x9?3VA(+!zJ(ZF>H@3L~8blLVCp~ z%fG4r0{N2yg~s0sEI-*yj=HjW%=HB%Un&_JbfbTNEvG0cDJui(BUm2O;)-LFaqM4m zh|WSTUC5Kcp5oF_&{4L`igH2qAxXp{Jt9SUG1~H!lFW(>&nH>IoU|juvwHL?S@OlC zwwQh;#-ht#DY*E%RqlmXyizFnYm*}GaLoGd>P7e6>Ro89%gW5kNoe1ymU$kkI_uM; zIf0+|SsD7n;|g1?gI0lK+`cbD>!zJ&d*ftL&hdoX;_Bsato}(XCE749Vt+0;m3Y7()0&T z&dc0qy{)|aa`CYW<^TtSZBNjUD>)$=uNN~tJSsY>rokC4-ayd3?$R0iQSd|TF5Tbz zB6dkddaQq+{lk!xp5wQE<8{WIym%YBwsDj7rt)F?Qu~3T|H$)J93>`-e{Z;SY?!$BT zA{K;QarSdGEXFxv^`z*mSY#HA4JjJEJX?VF6KqFT569^nKdO(vK^CwKm0*=V`u_Ew zOu9n(t))1%BF$Q%7PgB+yHy2*+hH*-@ylcJwRmDQj(af~y$Lg7BONku;+b=f5)>sm z27SPmI_w_9beW$WFF#U`Pt;5+P+%M?ux|TQ&y-VOemWq*F2~pV_n-J1-Y@C$w8_?D zXCnHQhxublx9&MfSsKz9!LP}QbvwJmD@g9%Ic&kvv*QQB-R6vMb+IBz@f_R|FD=ri z&2}#xdGnPSGrn6Np53E&*^)0OS5}2P*1X+vTk3_@*B&F?gWamBWBUcJ{6OMbUu9+X z%A?Il*6X`h)X!CWx5>%FAK{!UNhrm0(i}!~7>?fx3o}xp4Wv}ZE`1|3Wf64_O}ydY zCb&ZFDec@KuSy+jzODaa$u&=pdHjW#1;^$^Juz+VBphV(&rjvND}89cy!&n$T&?$N z|Dj*WO?|TT=Wr&B(jJBu*txfn2RS}2n0q@eqFZcC7EhoIsY2H_1UV)_G#n#^|AiW) zKCVg_KKREO=|{G2g-`YNlJMJKYPlozEbO@aY;@_6bJeCraIK&hdgA&AZ^1@h88IXW zq#V-W^{1*RB;s}=8HeFYPH;gYE>~Jqmot21Qj6hA#i5Tp_YueW2&KtluEZr}+*0sw z8ALhN=lY35SDyX!D^UxN%{NDlsaZL!@jCl(pR#ysk1ANRx@3@E*#6g|yrIJk?8Sa9 zwjU4r5y@aSAoh_Vt#Y{%Gg4DyGLqppr9p?%(qbYr;Ah$_W^aEDHLDys(G^XRt(B%~X zn>x1a$&pV!AGPrNt0LD;TU&pd%nptDWjPPrT2_Vg2hxi@ZGE!Z$Ke_DO>r{CIK(>f zv{*Af9v*3YyotTIc7FcOr^$XriM`1D4>^xIa{q?uuMaX^L(l%Nsi{YgeqYcxD`NGQ z);qjuD!YH}*)`V4g^qFWzJJ}ihi;nm1Cs8DFLKnC3*Rdjelg;`>1IA6Yg&FU{4d!s zu>Hlr89Qg3ts`l!I&xdZYY0%vd4k!tDRNz?wmC6;IHQK5CsTAEAm=)=Xn0T&jlG*8lrhy7#qL zbNe4C%Esw4X2vM}>Ps&ldtT)@wfWn3T5hdHSVGtOV-G#f6+o1@NP6N-@10)L;O=eW ze_CQ*ua$bkswJ>?rOV13v;%(1YKd|Speo9O4 z_EJGszT2k?c0c|+(&gHipPy*%G(r*aOg4O?++rf4&Wl&oI+krdD}W_s?aFI4YPq%BTeU zm6vEF!ksk=@V}nXy|SW_%sVIuwgSF2tUt8LwI=4gV!weBRsrbAD!O5 zUxHFNm~TRg_5I&Iu^!!y2yt8c0~_RnCW#O;{+2H7Nl(OFaRlaysajfWYEsvE;%V*4 zv`^i@i^^_CM}*jp$XS^WtPNNj1CwXWy?<+9!HD7Y_E{{J-u;W`_gDwkAwK-iKP|sA z6<l*lhk8ZthY5fnC?*2xP z3&nqq-!Es-1@%FqKuKCwb-cnyNlGOeNwJAZ+`keG8raH!QD6wDa|HPO&}lMXSAO^I zO*1dQYC*GSa@S*JUbnvg=YWG%kG-rm$QE?k#Q!$F#YNswRH)Rk{736+>xbi?bPWuB zPj|L6F2ueqacspCe>K7dr#9rCo!-4)M7VYxIR4%KeWyjZxZK(i8~O;^+~JEl!(+m6 zIAD0VmKpK%1ALujHA8?#apGtS3iBbcZh*g;k)aP-oBdMdckRZkDtMTM2^R zC=x{fI4I74-Lr*hM~)mE_ZR;gnLQH2SG;!9?J+~dA01QN_Q{_Xp4ezD)<>?n*8AwA zH{~>{D##q`2y!|nyq&!2gcRhviAStYL(0VL_-MTRI=pg`IbyJgx*ORpL)OFKbINpu z%lUHTsouK46<7Ym$5;?OXRZq;&Q7w9i>d!`eE$_MJu>-Fg_Q6aKjh`GmnCbil`W+`{w(n7aUwN@`DGW1a-KG7`j@-a^T!r-^m$r`ojrfh@W45<< zu)U-0_h4-7Y3=)aEXyk1J*E_m? zR2>ZXNgPt`GvEH$u^qZ%pR6pck~KxPDlJ$S^7(P7Wv{-R zNcSA;!V06b>R!91ii%)OuuT^5=8`MMlq1x)yN-N&@82pfiZ%EU$gv7*z5jYnkEDfI|CxagBLuf)#b7@1z zw@tyuboyoD4`H98L^#xeC-<(l{_(=wcRl>v#y$7lc1gB+#nSSP)J(NM=D_+VPiZSh zADpt|fu;Vn>Wx<)hP+^5&O@$`Ays~HuFlge+rqk>c+RiMoo!$Zeod~3+UcTa!W~Yl=rYEq~Pw~Im-Ns zhTJmF9_4Rs-RpWjL&r(X`VB#D37#q^+cVG_{+(Kmzf+&=CpnA(1AgU6+|&Vm;*%Uk zSy`uMra+(C*!#V9O{Y!-d*Ag`2|1r>4mI=Z;9WSqj#}Qe)jaQ+(S=iVYjESu(NM= zO_GtoZqIn_iC|5=d!Js@4a}Znw`ly|?3()Y>8$CH#ERIa9YJ}o2-ei6Pe)CR-OQ$x zgnJ(^<&SfS+Jmk8NijgybCUkAGd47fdAJa?E0LXdocD#vo{X8G)6EK7bS z$D8as@wt5jHNCXO#yZ#`>k7|OIH6J5Nff(y;IcbM0-91=@lkzczBT3UtxLX~gzYBn zWwP8T`UD$rtzrN6*!@!#?4QFZEbQzbPcUQuz6wfVJ+;7LoOM=b5A*RIr0h-VhE;{` zniI=b5fND8OJcY@J}N3EB0dK5m6$VjDPgvN&m@pL&Gyi}UaqN!QpuzFF4vZN_*=7k zCLiIZB}4Dn#x&vMQJHsJLsQ>KS~-_{m}EPXb(M9;gZQjlX__^ZyP3Knn?Mg~M@<9T z5fP)o)6*hia7Ix~Yy?gilS3whlNL0^erqvQ`&+FFlU6-Axunc{aj%qb&)oLp{djms zt2%Z-owPQfQ4((-%6NOK@VFTlg~mWqQSKNc0zPnrOk7H(Ev3Ph2#6yIb%ozOZpN#Hkf__>kzWpCT>6}`J@xm#M@Gvm1HRD2JamV0L!U(K~hNSX8 zYKp$R0g;wVyQj>5*xGOXpbmfi?^_Y9kGD!6J~TY@uHYD*5wgGE+VH>~A`@7dtUOBqRc%U?KVH9Id|ud zdi3IFcdN0g*ELIzeHk%&$e0ULE@*$Ge)IOmv6B`i8e^=??R#p^J%8wHPybV;>*G%B z&&e2e?&WjUjxCSeIll2?5V9SUorC=`+1M|RwUw~29&zz$y|grZ!j~3jKh)HH2TOtqOItDmJm-W+X(J<{WW(U*pRZXEbuo`=w6A|#s$mlt$AtNKP zpdfElLxCd^i&BZ9HTBmFJ%~=SKCM zmHFPwk3XC}u5?D@=3AQTCSLLQEnCs{Rq$(ez|;3g+i_rBuiV6>Bm^##lA?O`!a{tn zxF~Ev`?WK`Lv0V`Q?eCkfW+#tP}%VbHv`K!DBSSgJb8NB;G;wHKivJy%X-6A_j;~b z(X@8ars^F#H@$`pWopjg<@2vrh1QPucinc&kg>yGs2#fq=P2KF(I2<|Ze?`N$IHG|v&Z*robmdK#dVE~pBOiE z!adU;-<#%euU?Qo=9zYU6Qr%RmKetvn@1ZnW8>mtCC^BBx+^Ok{&PAGZ|dC87gXm^ z8$}D~7o65qjyi?N@7|HDHu06EpVx1%h@8>5-m~E5rnL(;58knR(;NQf_0!e7wEi<> zF-$r7^&VaI!kF`I30}6kr!(;qVZ$A#j)cX5C33KGnh+6@mXnh-x*^AK_Dn2x4VcfS>qbQ$lC7&>8EX2r4L1&6l3ur+qhZ=Phm0vim^t(kcnnBYa2 z&mDs+)z7~?+q(Ti$vZ9if^g~wVoliPh}FF$?4QA`IWY|>NaG{n3q}SBzz(e0EFiWo ztlDYv-cWK5x#U>8y8fbWlaI|T{NRm^d((2egfRd9af}+=cI9;<&i7wlfA`=8n?qsD z6aN~8_8=RO>vp{Rdq{h5f}g{M6Y}6tggau5q*MgIQiF5&Guk6toVa1Glm5jK;dFkW zQO+Rd5uTKNd-Ukx_0!WUzN;$x(~m_SH)sN^2|Rbzgv>?inaNz zmtKGUeY8m4p>43%bcu3kpgVXeQ9K7d&WXdeoxg~3phYsl#T&BYTg8s%=!^9DZa(Y# ze;@kkF;%qp(CYe@TX%i6?5gV@O1BQ{bFR1kbK<)X-ce^iJ7M!k>$@Y@x3nVH4E8ce zR0Dd0^DK~?C?-KUa1lgiBw&3~a-9iH$SPQna1*$Pq2txuF*e?W=L(IZh1SyNV@8Y^ ze^K|w@2NF!Ca;$*K__>N>UDO_>?T`X*4{h#BBZ*;gC;`)t2p1s)4~5(VoprJQJAr( zSz71Qkwf+jeU&|&n1i@<7pLv7od)F&C_bK48$;1bZ#ST=lAg&W(_Va5CHa{O8m33EBL&<;v zvw9^S`_*Ne0_%=PZskPix7KckViilyYDMdu*mdKKiP10tO6q!4YsWN5^op}Gtl)HQ z+;8&cI+^qMrG+vh`t2p1w`Cf{X8zi`jzm`xm9KSfwWGbrKYNJ-Zj^YmjMifpzU)-z z^(}IpaoyUmZ|(cB>NtxzGZ0Jd5({Ef*L9EmTe-)93?dS5?aV$X^*FbM9SGH9EOI(H z6E^fv5JMt8sL46awJcPVvB-hI7^BF@x*Uqwb{9AQ7qg+Qi+O^n$*yXR)!|BG$Hrh?Lxyze zBgP}Z%#etuYaV-?uoZulHW_j=Hyi2cc9o&AW28mKPVU9nfpSOvM@9jm2D{qeXl@Em z=xE^*XGU-oLc#OkC_r*MI$DS|t6&SeWI*94+}WkB>z#VAuGG}id)u|H>pSY|5(i>k ztHURCv}>tDB95|p&^0p)^$c$%>L~KJER}xpt}c-`)^(uEDBRFd*O@C3T}R;tWHqtt zI&Cciqi|c;WV>CON7ZUIY8*72RwEkTb&W(U$Q5q4PRmoZc$dhX(nj3bxmJP|czkh! z6^=a27HwO*CuD=zmm@ZaRSVkSUA&Gc60(Gf4dQ;(Im__{bwI_%b?N}v@;Ge}zvVsH z?kLag-8(e;5{+`K3#$p$gF438^>pqa;9Gf=^C!Cv(4levWG$UK#OUw?v_7^5Hu^Qk zN=H2Wv~hQyP3vQOaMud7M@F=$s6)%yB7c{JYmWE@g?Cf>I8O&aJ++OD0k5bgyi+z)Cmlt++!dT z1f5Xf;US$kwclE7$S#vS>=UQX8PHeM{~gv*>z&7OeRS~pOzI-uA3RMB`OEF=&LJV) zb$A^!aX+H()Lle$(IY#eF1m~Rr47#8?Oyll)kSv^g=ahQTlPivWT!9f zDXa(YkNMO(L(j|Ws&&VlwbT^W1g(RtsdahCvZNKb2Xw9{$h*j{>ssf$U#|-rb9&aP|mZ`QSvT4&dFT}NG2Rj2jQF`rsz*L7V-T~$?G`Y7W> ztwUWJv`)r}S|=+Scq@cL^+B!kQtMEo-0P5NJhYCsk2_Brg%6lP>jJ3_S@UhJ(?ez< zwMhnTsZF0QwP@E2=2-Ua`}nkbL6y zFT2>qJs2O!SeJ)v%d{6~F70I=*aGLo^f@}*$aJJo+%*-=tkr9-($Oz)2I%!Rp_o>|)89~;A zI`-T3gcg)Tec}kRPikC$){>v!DH&^V81k#zwQvOO5t)mTMZR;p1sp+pM7CiB<*Nvu z_0H?q%>d@)N*qTJVOG|&fg>nc^)!xPWw0k3>{dochk6@48(utV{Fc4N*DKQ7?%g}u zY1bofan^%6#D~K@oxVtL6%YDqui~k3PqLOSvhQKN>Kr4z)ecH4aSlAz;xzqaDKe%< z@jNa!P9TeM-Do13QQA$;Cs#8`P#n2=g+M%Sc^0Et~W|~6=Uz1&Ix8~HLusBUlEEriG5ux==aU+tFg0H(? z$jGXZe^+;Nr`M!tQBhiok&#rKG&spf!p@SKr0tpAISK_+L#HI$d3a>r%+z%l1KDui z6A4dc!?Lr>D0v53Kjn`cHn?Yg-`GWI3+p^1hn?Lsw>WV@xi#RYtQ(!zHcYx_e*X7~R2S1;(E)xB@OulrBgkWw*qYDHSbGEHv}$Ee-z+JT`;#`m%DvB}DGAmeYi zyV{JYac>Wo1VY{L)tyMO6h}ZQ#DBaPG6Wp3AsrtE*otC#TJO=9niJ1^u*#pkb^El@ zJ2RfDp6NJrhd=(jp{rM|QE8JFxwCHaba`TU@QIpA5KVDA<%!PiZXCG+z3lQtC<&gJ z5@wwCXlua0*{S+-Jw`e&@A_!x;gV}T3H6JUtdpT z=$?^KoG>`SNWkW~nuP86+J@qpYG-s})~4M!vn!-9(3ehik-_3viSD?pA9F_yKf8NP z&xIw==8UcxlAhN$ae>de<>ot=Iw#gooY~!<^^&VU4nnFw3{5F2`pjB)OY7N{g9im} z1sR^2VHJ|2@Rh+qDyN&-VXgZrH|`R)bHSC1Uf*V-{~;FLuRmS1{J z(yBQ8{!wJX-mD$QP@9{aSRE`DP7AJz2ZO+c4JBnIr9l(*iA0cw(YHCT<5srwkFclG}aLT)6k&qS0%ex;-Pqkj&*SF|VH5d~33_aM37N==Fs$=6K&TELv(^Hg6t!dl@ zYnrG3$nfMzJ*|1^)=ITtlX36Kd0W2vIcG7lSx7rRw;pmBj!V&w)KgDel5=>L%>EEP zb!ln;C3l>%UU2l}9og|H=>U2r*O;*B#N_uTw{0^ z5Oz@fUrqt~|2P8Z|9|Ki{utTQjt4?Ay1roLYI<^=1UX1bA(pBZi#nS}op;PvE#`1w!ax%U+J^h$) zy=ujx>qgF*vaq;*#^@U^yJ$|q#NmZ!4H$jJaCHYx4!`At4KKa7+Tq$}Y@WFwcUke| z?Bd+M)6Z?Zvgis=pS;}S%+dzyTRnZAHQ|iY#I@V-{V2W{hTjC6!bo0+n2?O^6y#dW zb&6LuF?b!HFQWGz+>dj>z#4^EWl!zayGKrbY);tlhMc$_h!6Kj=IIcjO?|T35L{=6 z+IC$*Pc|fijo045!FqOZMJTx5j=j>@C46-J0~bu1P=80mgp@zsbnc527T%W@(?5K| z!;^1*sO|gPrr**(yn545#V6K3s?634XWwo8bnC2(+vg1Zpm)FdS5!&<;V%evkNsrianFUDHKxTt!;zR18P+P|x;T?C>;%$vPLR;5DcSsb0b%d$&RW_u8 zd%WHbfA);$=)NVV)dKcH+)AGf=EQlyFDU!tLF~Q)RSj3(?<|}we|#jKC3jsTGaEx< zCSlq+*5|fg>_lcAnflxJ7{BXs&o!qWv+s$DI_;iIJMU4WP7Si}K?e1%^-Pz2UBPF~ zIW+?JM7^l1uF-6?$aqZRZT4N5HIA}t>h$=f)y8?Uw=a0ld8a1Y_k@L=_Oxpy3K_ho z_EgcC_aIAtp~%R-M{}vM6J!iUCL6*=cl`2vZQ3teV9jH`1Far^#g)p7$$qVO#&dfAx!6GG%^c zO9|1gV|HJ$%_%f)I-**gQo=0VfU@ELl%{P#iuVz&8#OIvU=Ai~Ij80Wy;#q2;ygP+ zAF&dil2aRcY9ny?sQ~a?VhwTRsa?1-hB%fuj@QStJb~ppmg|X=h)sN!pV&+c5L<|? z#E1CYM_I#TeEM4AbCiBA(Z5T7A#Cca4ALVSt1mAH-g3fuN7@ipS> z#GP!d8aWU__?$k%Pe+lshURlnkH1Ud`*i39Cwh?dUowxAL zRV?31yq$P2aV>kjp3mCIGDlgx!y4Y_b&iGlfaO2&9!g$)%JR3w?}^9wtRH#jaZ2DM z5&OqAr>=<{^oeqhK1uG;8>9{Tbos45gV*Pw?fVlM3QT%louLp>Uqe;wB=s zRDYl4{rv4A;-952`o}DP!t!C3KV|uI-v1Yt|4RIUSAHb^OVEgr`wf%jNS32mrv4c5 zypqf--H7SL?!4ZE*i(9HWU$I}mJ3+!%W@&hMJyMy z+>hn{ESIoc%5oXY1KFyxh(2N^v6?u9IFvY&IGR{XBrh3cB%_{JCJ`qSrx2$RIhqDX z)0in^YRn?eCe9&VPP~FRPqf0APh3D;1#L0Os3sZJB%_*SR1;CGMEq6k$RwkhWK>fV zYce&lCX_{R8td1H8o*WQxjb^HL*2Q z6Gk;PVN_ESMm05IR8td1H8o*WQxirtHDOd!6Gk;PVN_ESMm05IR8td1H8o*WQxirt zHDOd!6Gk;Pv0_sbMm05IR8td1H8o*WQxirtHL+_Gdn5&gQB6%4)zpMhO-&fp)Pzw@ zGODSBQB5U`YARt=lZ)l|Z$rV>Uql`yKQgi%d0s;PugO(l$KDq&Pp z38R`y7}Zq5sHPG|HI*=`Nk%o5FseyLHOZ(Z8Pz1Cnq*W{38R`y7}Zq5sHPG|HI*=` zNk%o5FsiA9QB5U`YT{&FL19!=38R`y7}Zq5sHPG|HI*=`sf1BYC5&n+VN_EIqnb(> z)l|Z$rs61*QB5U`YATKe8P!z6sHURi$*89KmRE#PO(l$KDq&Pp38R`y7}Zq5s3sZJ zB%_*SRFjNql2J`Es;SSBdURn_Qx`@xbzxMKjB4t_sHQHAYU;wMrY?+X>cXg|PAw&) znz}HmsSBf;x-hCqMm2R|R8tp5HFaTBQx`@xbzxLf7e+O8VN_EWMm6<+36fDwGOB3^ zqnd^=s%Z$Lnq*Yd5Joi(VN}x)Ml}s#RMQYfH4R}@lZ>^jST&b8pS4}ZdlvAo3t7IF7+^gQ@ScbG*C$xs%JM73S9#@i*0$r+ z6x1yI9IHOzU%y~IcE66Ze3EDh>KakrP_g<2a=(6|JW;=#@7BU62}wk zh!cqo#75#&BBf_gdd5W}L*ruNCB#dKml5X@=dnHWi3^CU(4IJaS-Vk-Q#nN8kT^A; z_yAGf_;Ko0;%=faVVn}ii_@QyE0DaDUu1a;%dfHgx|Gpt+=E_AS>7gY+NPVf>DI(H z-I~~@8!ed+6x(#uHr=#MH*M2R+jMJUn{G{P)2)eZx;3#)H&%iL#WvlV*rr<(+jMJU zn{G{P)2)eZx;3#)w85SEX`61^rdx?^x@ntkNM7m`+jJ|j zO}7%;bStq4W#u}!xww&{kp$aS$zw=TBnrfs@)u}!xww&~WzHr=||rdwxUXq#?b zY}2iaZMt=_O}8$#>85SEb+JviF1G2`#WvkKdq>-J(>C3-O*d`RP1|(SHr=#Mw;{Ia zHpDjFhS;Xt5ZiPcVw-M5Y}0LsZMqGyO}8Po={CeR-GC3-O*d`RZHR5U z4Y5tPA-3r@#5UcA*rwYM+jJXZn{HUje5_nLi6$`*cjmxq1Pc{r4zL|5i+1JEc95eV z$P*JH+>h?-Rx6$$@nUiqDe+>j1(! z1mlSD#6+T4M-Htc2bz!eQ1f%B`8m*h`PFe=KS{I%sew6qnEX~3e<=rgh&wSNf}@D% z5zi-%C5|W75hoHGh>gUlM7ti5a}MR4LpkSA&beAFo}R0@i8;7G7xLT%EQb%73wa7w z@OmZ7RYdWkb1|P1Y$l3@=3+i2C?0h#I7fcFljYsSHwD2Ss2}nX94PldK7xFfs$iK< zQCKg*^>g^Ehgm*OJV~?!AveKrX}=ytoFwRTSz zSjwVrd0=Bf(YHM6TORc-kNTEJeaizIP%Avt3Xc-4 z@W7e`MJqhub0D?CL#^;oD?GYrg@;<n~*D_6&}nZ1Vt-6m^%oHR(LR95EQNO zV2&UtTHyg};VIM#53EVbq7}X2fiHn4F8)tGq$ik#fAT5Ae99-E^2w)s@+qHu$|s-l z$){xUDVcmqCZ9dcM_*7I`XVTO$!A~k*_V9wC7*rCXJ7K!mwfgmpMA+^U-H?PeD)=u zeJP?Q7g3XosL4g-)go$g5jDApnp{LpE}|wEQIm_P$wk!UB5HCGHMxkITtrPSq9zwn zlZ&XyMbzXXYH|@ZxrmxvL`^QDCKpkYi>S#()Z`*+auGGTh?-nPO)jD)7g3XosL4gt z_Yr^W1PF?(7J-InXZLdDQhuoS^QQa`*e!6ITmVhOQ~IFNUqC2fE;2?}Er!)gRi5-mYk4gQLE5G00okf5+Z zF?=D^&k-r+h!k@~ia8?19Fby<~6mvw1?Gb@*AhlgYyqI_i@lxVt zMC=vBJ@ceJurk2~#8qfd3E8QH>{LR_Dj_?Skey1%P9J6q4kx} z`bubhCA7X0vQr6du!J^PLK`e0JC%@~O2|$nWTz6cQwiCrgzQv8b}FIGmXMuF$WA3> zrxLPL3E8QH>{LQ_DxpP}(4tFd(IvF#5?XW#ExLpjT|$d4p+%R_qDyGeCA8=gT6787 zsf6rQLUt-4JC$m&)=$Vm?Iz~HPb;OAN-3XG$VaaDiQ?IoLOz1x-zpy6d4 z{W6Yz8Ard2qhH3+FXQN!arDbL`ehvbGLC*3N571tU&hfd?J3A$;n=FvX`9fMLb{be~j&4OMIO81o27YI-<gBEm0a z@ejR-^GjL0L@%QKQa(UDNR;(EFQWZ|62f@|S1ccwmMa%AoES}%S&vu6$~}BHd6k=G@kqTYfo1Vay()?26#goW*h6#xs{?|v zI^gB%fETL+@+`4;uM&IrDzSI35_|VzbwE(w(Oy+48lnaftBJBk;KdpNq>42HL3z7* zu~Hz{B`WJxCwQe@P}k*Gx=b20 zr}0--ia64^cr-1QOAP0WFBa2EJn&`)e828b<0d>w?p?j-Iez9|T1 z27-H08%A7kl3c-<3T6;9iP^+lqKBAIEFcyV@l`*5g$&R@e4UI{%viL%9PJbob}a|H zZUpA>ui~whgIxv1H!H^~=SRTdMA6%Ft%f*~e;q>{OB~1R<5`}-avjU{MCnC2WFpV< z6Pt+vVhgdA*v32WAl^y5i+DHj9^x9}qkPI^#I?l7iBAxpB(5VqMO;sOnz(`Z3~@8@ zMWVz=%fXz2TZ!9>}PTa{h@8UfYgDuBOsQmU#miMy!7VmtU<#$+qm*w|Z z-pBI$EbnLe0P!I41L8--L&T4Xhl!u^SDz6-Cw@Wv3-L?hUx{B4Wgc1%&J+wMMiXO* zqQm9jO!=#5ayh(uDJQU;$Z`_P$Q6g{$OQ)!%`69J3X1NPgC_+=_sYSOg48|mq?FGQ z$$$@~e(DwYP_9$2z=tS9|Dm7If5C~oGD&^~#>20`cyiBlmS;#A)`7o*@$gsJh?IM= zoXK()%h@dF62+G&hsPp!_GUSsWr^UG!+VkIeOWGKxrpUrmL+;z4x5sDB(72p%aU># z%QBZK$9kNg%+boR9w%5$971H@F=!fxi;(r5v*xd5U;1<;GN&r?E^Kg7M_KEyJ1o>n!4I;vC}T#4CV4vWJiC z;Ujza$R0kjhY!A)+#~GaBYXJB9zL>%4_?_vxGtmY!yXB_N7%y$uS`&S=Yv-!W$B#{ zUYV4IJ$&%W1cg0(WDg(wE-4Fp_~3U53VZnAcgdZ?9zOV8g2Em?_+5g+9zOV8g2Em? z_+5g+9zN`&5ES%tyBcwAC`hh%PYHYY;Bm=4!X7@dhmY*xBYPklJ+BLU z_{bhUvWJiC;Ujza$R0kjhmY*xBYXJB9zL>%kL=+id-%v6KD|ASmon0hag(C{n5bO9%>QR&cIV!MRce=Smfv zD^+l=RKdAY1?Nf?jN?^s-ci9BM+N5^6^u|-aMn=4`9cL}3Kfh{Rd5zi0d2&ypofCO zMHTd%D;PDZpwC%BZ?l3?qYC<&6_6P2q;FY4ud)L2kt^a!RzN0#;yqS^8v{U@w^ouH zE5VIYmR?t~*OlybC3{^7Zd`-w!-=vJpc33DC~t&H?jNfJH||1t9Iwm%u}W~G+#~zP zD#48#fwF(BQj?Zcf+6LJequ9GcGpybAq8cRO(msWNoiM7+Le@cC8b?SX;)I(m0(DD z)?>uA#K(zG5T7KjBR)lxRsKpaq~HePGsMlr7m2c}SP6y{l(o@HFr=XDG^^xJvq~_e zlx3$`B^XlLyo>kjW_b_GZ?e3X<+s@Pw^@FN<#$7XUg?#mUD@Dyy9WGH_Q1f_hGq!<-RNzvRuS+G0Xi}?$5I9NvH&8%2Uc% z9!NZk=p$AVtBFI1>^m*J5}YYDj1tL!Go^eU%e5?@&+=Fz?T!pkY0&P-1C`)R`IXEu zE5Vsk7EY)HXG&R^p%R=aWm+XTQ_5rsaHf=P8Oq+&N^qv2?4+s$X9~(rs!DL?F0Bge zaTF+?RTbDnu#6~vP8I!}D*8E9^mD4{=TylVReZlx@y$}j zcS;rCCRKcoRPhZmi2K2YVg=+VayXfSdKfVhIE>ea@%k`Eu9!>8Bq={095w(U#+FTT1#)U7Lh%vSv<^I`j)lyEo7|UJJjYO;V<^utl;>DpAIs}wd3`LekK=XZD8M+5DdYK+I_TIqtqwXSDBfcowWv-L zEvlmy)p15v$5~h%b*YZJRLA*I9p^`NoFCP3epJW#Q61+;b=0>y>RTQ4t&aLuM}4cK zzSU9R>ZosZ)VDh7TOIYSjx(S-&VA}Q>#3s#)=>lNsDX9Vz&dJR9W}6y8dygStfL0j zQ3LC!fpwhM)Nw{r$GJ=$XEAlu%sOgj9W}F#npwv=MIGl9b=1;2*drtcdlVFgucO}9 zai&nmIYJ$02X&kg)ET|y9?k;l=>ONz^RJ`NUq^4h4(}|vNBsOcYJMFxzmA$;N6oLJ z=GRg4>!|s4)ciVXejPQxj+$Rb&99^8*HQE9sQGo&{5op>MDp82^4mo6+eGvzUu&RN zG*BxV;Ja?b71?9cK;N~2eQ$tQfGdYEdJ#sF7OK zNS$e<&NNbI8mTjl)R{)=Oe1xskvh{zooS@bG*V|8sT+;djYjH5BXy&Z`q0SHZ{*lD za_ky8c8wgnMvh%0$F7lM*T}JJ>4?CjU2m1j$I?iu90Kc$gykW*fnzOrcl~b zC~fS$h5WH&jwq4aDU|jUN_z^WJ%!Sq#?bH5R};OyCi;6#^z@qGtH^cn@tWYP2-XqBqidos z*F-O_iT+y?J+~%fp44y5C(1s+Chkx3Q_gj5SH#BfJryoG~ZEcm*iu0OcH@oCB0|fN~B{&H>6fKsg5}=K$p#pqvAgbAWOV zP|g9$IY2oFDCYp>9H5*7lyiV`4p7bk$~ize2Po$N6fKsg5}=K$p#pqvAgbAWOVP|g9$IY2oFDCZW+xrK6Wp+2`z z&MlO43+3EGIk!;GE!5{0%DIJdZlRo8DCZW+xrK6Wp`2SN=N8Jjg>r78oLea87RtGW za&DoVTPWui%DIJdZlRo8DCZW+xrK6Wp`2SN=N8Jjg>r78oLea87RtGWa&DoVTPWui z%DIJdZlRo8DCZW+xrK6Wp`2SN=N8Jjg>r78oLea87RtGWa&DoVTPWui%DIJdZlRo8 zDd$$oxs`HmrJP$S=T^$Om2z&SoLed9R?4}Ra&D!ZTPf#O%DI(tZl#=CDd$$oxs`Hm zrJP$S=T^$Om2z&SoLed9R?4}Ra&D!ZTPf#O%DI(tZl#=CDd$$oxs`HmrJP$S=T^$O zm2z&SoLed9R?4}Ra&D!ZTPf#O%DI(tZl#=CDd$$oxs`HmrJP$S=T^$Om2z&SoLed9 zR?4}Ra&D!Zf5)ArZIo~uCEP~Ywo$filwliX*hU$)QHE`lVH;)GMj5tIdTo?m8>QDq z>9tXMZIoUcrPoI3wNZL)lwKR9*GB2JQ9f<#dmH=S_WwwF|M0l3`rLQ+Y+tFjr8%mA zrs{BSduW(!f^p1`3S-*qK8RCufWoCfpiLmLFV~lFj>(ZjIHsjQOPmlIew;+VqF9<7 zkYpo!{5U?capjTZ$irw*6-80)BmXuKW4oaCv{IbTjP~rg@B87O_xV0cd-huE{jT+{ z?^=6lE$aRlb$^VyKStdjqwbGU_s6LFW7PdI>i!sYe~h|+gF5~#_&E4Y@QIXTvnNuH z&7RPz?~>5Fk)KdoS{7~w-$lCD2cAg%A^10>d<}dU+yg!WJ__b|avHk`mW*l}dcWF+ zvE9$8Z5YXm9bZqdw>o~cmFVy9deJLS6cZOAF+txJ7PxxiZ&ymhIsol14XTQ|IQ!&^7Jb;DaXymiA{H@tPj zTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaX zymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ!&^7Jb;DaXymiA{H@tPjTQ|IQ z!&^7J^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a z54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`ojTMxYTz*`Tz z^}t&Xy!F6a54`ojTMxYTz*`Tz^}t&Xy!F6a54`olTQ9uz!doxA^}<^(y!FCcFTC}_ zTQ9uz!doxA^}<^(y!FCcFTC}_TQ9uz!doxA^}<^(y!FCcFTC}_TQ9uz!doxA^}<^( zy!FCcFTC}_TQ9uz!doxA^}<^(y!FCcFTC}_TQ9uz!doxA^}<^(y!FCcFTC}_TQ9uz z!doxA^}$;oy!F9bAH4O!TOYjj!CN1^^}$;oy!F9bAH4O!TOYjj!CN1^^}$;oy!F9b zAH4O!TOYjj!CN1^^}$;oy!F9bAH4O!TOYjj!CN1^^}$;oy!F9bAH4O!TOYjj!CN1^ z^}$;oy!F9bAH4O!TOYjj!CN1^^}$;oy!F9bAH3=RaWxX@zw|(lr`l~N-P3L$>0v*- z^~0OKrI6xrp&#D*;jJIu`r)k~-umIKAKv=mtsma{;jJIu`r)k~-umIKAKv=mtsma{ z;jJIu`r)k~-umIKAKv=mtsma{;jJIu`r)k~-umIKAKv=mtsma{;jJIu`r)k~-umIK zAKv=mtsma{;jJIuo)&LQsi(!8@iuYtv^X(-4SX2f13m&i3QmJXuw+#2get$@qw*WQ z1LtX#-}pPAcYHmq@*Cd(-VVMI^j?mqRes~0;9EfN1lvnF_fpQilyfiT+)Fw4%6ERo z<=iXZ8C}l3@|w}*+$*mMDd%3wxtDV8rJQ>y=U&RWS3K)U%DI6fKsg5}=K$p#pqvAgbAWOVP|g9$ zIY2oFDCYp>9H5*7lyiV`4p7bk$~ize2Po$N0?LCQHuIR`1{AmtpS zoP(5eka7-E&OypKNI3^7=OE=Aq@074bC7ZlQqDojIY>DNDd!;N9Hg9slyi`B4pPpX z%BeZO%4zf(W=^HG?RAD6vxXeAh8(ko9D5{kT0K_3O?i(*F6D35Ird28*dvikd5=Vn zJrcQ;_ekWls_bXHMfxi5cT#JlO?ygFRp` z*a!B5-XoDqd5=U+UrCJKBazcr5~KG>Mti&K6Iz64$cy+o?dn9t~k;nz!BavesmkYc{BFAhl7kH0EjyYW}@E(aA zGrL^iJrcRVdn9s!_ekUd?~%x{Mr~4^e{ue9x*7B?h3}F6 zJ<`8N`uEaKA0mB-^dZuRNFOGBnDk-Nhe;nHeT4K8(nm<&NBTa}_mRGj^ik4BNgw6g z^eEq^NBK5A%D3rJzD`8GYux9L&dKl;n}^KJS7xf~#u z1LSgmTn>=S0dhG&E(gfv0J$6>mjmQ-fLsoc%K>sZKrRQ!kuq93+>6yJh|k_B~LDSa>~T#k^- z5pp>~E=S1a2)P^~moah~BbPC986%f5av39+F>)Crmoah~BbPC986%f5av39+F>)Cr zmoaiVN-jsqk`y93_{dRQcouq6hDcecPc9OE4q--ZC+eylHlCqto zY$qw(Ny>JTvYn)CCn?)W%65{nouq8fQMTtO+jErdIm-4NWqXdYJxAG|qioMnwrQ2E zGc~QU866)^6CX~qZa+wu(dqtvJ*_#TP;*B8RqW|kV$bM^Vww?onz4AAQFxm1cbf5c znvr*!F?X8LcA9Z^nh|!Iv2~hJbvpF->*>(nuctL(U+FT#Hj{)_Nmg#RM^7vaAM|3&yO!haF|i|}8B|04Vs z;lBv~Mffkme-ZwR@Lz=gBK#NOzX<#(GD8t4qwVS1Ov(#>u+RakCS!y>+?PjUnEVY}Z zcC*xOmfFoyyIE>COYLT<-7K}6rFOH_ZkF23QoC7dH%skisogBKo27QM)NYpA%~HEr zYBx*mW~tpQwVS1Ov(#>u+RakCIchgY?dGW69JQOHc5~Ejj@r#pyE$q%NA2dQ-5j-> zqjq!DZjRc`QM);6H%IN}sNEd3o1=Df)NYR2%~88KYBxvi=BV8qwVR`MbJT8*+RahB zIchgY?dGW69JQOHcJtJ3p4!b*yLoCiPwnQZ-8{9Mr*`wyZl2oBQ@eR;H&5;6sogxa zo2Pd3)NY>I%~QL1YBx{q=BeF0wVS7Q^VDvh+RanDd1^OL?dGZ7JhhvrcJtJ3p4!b* zyLoCiPwf_n5Eh6K7Brh%N-d4xto<%%wZwK2EE%O&dcX9_=x?bD(kml*F%w*1Cb$szTk3*lg8r4ir7p1c zyTID-Lf~(L3(_&8W32@unT52!r7mcmX!N(#1O$ymf(x4O8~sgiL34bg zzojl{UT^d_!3F7<-Y*?9`djJ(YriiNWxYt0^`h?i`gZC?#aBbZKf?YG`fq_3Q||{q z2!05>kH22W{zvURf020XMIy09e6ffx7V*U*zF5Q;i}+#@Uo7H_MSQV{FBb8|BEDF} z7mN5}5nn9gi$#2~h%XkkTD6o~#21VBVi8{~;)_Lmv4}4g@x>y(Si~2L_+k-XEaHnr ze6ffx7V*U*zF5Q;i}+#@Uo7H_MSQWSbr_WaUo7H_MSQV{FBb8|BEDF}7mN5}5nn9g zi$#2Knq2{B7+KCRvYa8hK0|bUhUoeX(e)Xk>oY{xXNa!P5M7@kx;{g6eTL}z4AJ!& zMyNB4P-lp)|0j9rba}M|opTI&rDch{mdI;~yq3soiM*D`Yl*y;$ZLtbmdI;~yq3so ziM*D`>nwSlBd>Ghb&h(SBd>Ghb&kBwk=Hr$I!9jT$m<+=og=Svcyye^Q}1@gK;UKhyg0(o5^uM6aLfxIq|*9G#rKwcNf>jHUQB(F>4 zb&0$#k=G^ixE|J$I^14J`m&of9d0ir}OXPK(T&|PLb^dyt zzgAH73aVZ~)hnoa1y!%0>J?PIf~r?g^$Mz9LDeg$dIeRlpz0M=y@IM&Q1uF`UP09> zsCoreub}D`RK0?#S5Wl|s$N0WE2w$}Rj;7x6;!=~s#j3;3aVZ~)hnoa1y!$V4Sy+B zO?mE9O}!WNe{fXU0bXSXc$FRCRd#?^*#TZ<2Y8ho;8k{jSJ?qxWe0eb9pF`VfLGZ8 zUS$V(l^x(!c7Rve0bXSXc$FRCRd#?^*#TZ<2Y5Agfs$M@2L6Ip4g3YI8oV0x|E*Nn z0bXSXc$FRCRd#?^!_EF{=>NH^vID%z4)Cg0Q=Q`fTdA@Gyc&KGn_7n-#rFTLRM`Pu z4gLSN)zJT^Uu6e)l^x(Uc&ou%4c=<(oUg%K4c=<-R)e=1yw%{X25&WZtHE0h-fHkx zgSQ&I)!?lLZ#8(U!CMX9YVcNrw;H_F;H?I4wUl|Q!CMX9YVcMI%v%lKYVcNrw;H_F z;H?I4HF&GRTMgc7@K%Gj8obp)^Hzhm8awA}@K%Gj8obrutp;yv>Sgz&*3`?4S^aj6 zp0!5LTBB#JX)JTP$NDvmXtwRmHH~Gbg#HG!M!#F5->uQ_*64R@^t(0s-5RIrt#PW} zn$9%#+Xg|Os<%e3T%%X6(JR;Jm233MHG1V5y>g9Sxkj&CqgSrcE7$0iYZ@6<9*vB~ zJN$l5)msZTVEa_PHJxc}^nVDhY4r4yK2>i`qo>imZ%w15F$NQ(MoIluS|qNdMMkeY ztZ}N|8Vaz60<56`Ybd}P3b2L(tf2sFD8L#Du!aJxp#Wgw_e?WA|I6vpVskd9iP_m zX&s-|@o62O*70c_pVskd9iP_mX&s-|@o62O*70c_pVskd9iP_mXgw_D^glYHSlQzpX#k4Sd?brwx4Cz^4s-+Q6p`eA>XL4Sd?b zrwx4Cz^A^2+HdOzpH@j4__Tpf8~C(=PaF8OflnLww1H0>__Tpf8~C(=PaF8OflnLw zw1H0>__Tpf8~C(=PaF8OflnLww1H0>__Tpf8~C(=PaF8OflnLww1H0>__Tpf8~C(= zPaF8OflnLww1H0>__Tpf8~C(=PaF8OflnLww1H0>__Tpf8~C(=PaF8OflnLww1H0> z__Tpf8}_L#Ce!~L3ibbnLd`^kuLm^~k*%4CP%{ysW+Fn(M1-1&2sINC{-bTrM1=bP zyC85o5lYX6Y9~Uq6X9Dy{eO*Y>A6sPE|i`NrRPHFxlnp8)Hi*hzUd3~O<$;Q`a-o6 zq1uU1?L@d2l%C6$o(t9Yh3fmlSx{fkW$U}SP~X9YIwe4;Z{NbJMz<58PT>}|g0BIk z=Srb2ZYQ$WgVJ-^>ia_Jxlnp8l%5Nv=R)bZP=R)bZ(Cs9|ry)Moy_%%hry)KK-S=hNry)KK@o9)pLwp+I(-5DA_%y_) zAwCW9X^2lld>Z1@(0yO;v`<5P8sgIspN8)HO1Do#d>Z1@5TAzlG{mPNJ`M3{=)NC> z?)yUOf=@$y8oKW*-98QRX^2lld>Z1@5TAzlG{mPNJ`M3{h)+X&8sgIspN9A}#HS%X z4c+&H5TAzb`?BrR(0yNMpN9A}#HS%X4e@D+PeXhfy6@{r`!vL-AwCW9X^2lld>Z1@ z5TE{ve7daLm^BX#enq7<>T7jyOG@9Qg!(2WG)uS0v!{ew)e&l?MW|IBp;mQ-TGbJ1 zRY#~*9pS^ER&``Q0zL|Ar?*nHsv|6dC8KIk)}Bh*TQ@ODtEI*xIT7IT7IRcVtp(m%yaJ{jw3U96O)(UT}@YV`%t?{jw3U96O)(UT}@YV`% zt?{jw3U96O)(UT}@YV`%t?{jw3U96O)(UT}@YV`%t?{jw3U96O z)(UT}@YV`%t?{jw3U96O)(UT}@YV`%t?{k58n1)|w=#m?$_Rd|PYh7X zAA=roZuLA=_&)jfR?kL-9|gY)eh(Z1hrtnWAGja<01twBa11;O9s_>>9tX$4 zQ{WH58SqEo--FMCFMuzC{{Wr=m%wwN=Kd(rcNRLTxz%%Lp?0qc-wje8&z+U>0q}z$J__-X=g#`8wd>aK&q1v@$o>@Q(zfCK zHoV`4_uKG(Tgu*V!~1P`zYXuV;r%wRMd+{gew)vW5Ze1~J}*LO@3;B92%){-=Jg7p zz2D~b3ZcE<=Jg7pz2D~b3ZcE<=Jg7pz2D~ZB82vSo6n07+WT!@!4TT}ZC=3;+WT!@ z!4TT}ZC=3;+WT!@!4TT}ZFs-U=S9f2_uG74M9_x!+wgu{VDGmD_I{hsixArTZFs*8 z@3-OoHoV`4_uKG(8{Tj8c@aTdXz#a$_I{go_ZjW|HlG(EwD;TaejDCz!~1P`zYXuV z;r%we--h?wymF#n+52sHzb&-)+d_N44ez(%{WiSchWFb-d%q3uw|V6x$l(19-p}Cu z4BpS+{S4mE;Qb8V&*1$G-p}Cu4BpS+{S4mE;Qb8V&*1$G-p}Cu4BpS+{S4mE;Qb8V z&*1$G-p}Cu4BpS+{S4mE;Qb8V&*1$G-p}Cu4BpS+{S4mE;Qb8V&*1$G-p}Cu4BpS+ z{S4mE;Qb8V&*1$G-p}Cu4BpS+{S4mE;Qb8V&*1$G-p}Cu4BpS+{S4mE;Qb8V&*1$G z-p}Cu4BpS+{S4mE;Qb8V&*1$G-p}Cu4BpS+{S4mE;Qb8V&*1$G-p}Cu4BpS+{o6Ed z>i?)yI)h!PecD3pAQEa%i_qMYb5 z?7|O&I=xx;N3eBzv+R#y>kM|;+E*#Ge%_X{M&0HWc%j?sZCZhM*>ncGP-n0U9|re; zkARPYkMVpL*bVl8y!T3v~v&P-n0Ubq2doXRr%(2D?yaunR}Q1E9`e zSBlPH7wQalq0V3z>I`<_4?vy4E?Z}?3v~v&umI`|cG)_ET{uNabOyU@oxv_FV(Scc z*(Ge9!7jVZlRAT4_AK__W6xph40ff@W9tld**b$=s597wI)h!f1nLZS**b$=s597w zp2OazzF_;u*gAt<_D`{O2D|L5*gwOrx#U3;_$%PAgSYq@^&LIWEa^7&Alt2^>kM|; zuff(C?6Pm=S8bqnO)Euvq=hvWyLE?nccbz?g1U!_BE9jLwEO3~hL;m4hq;xYYJ zJzZ~OE_R#xyHmFNuZq)TtMBWtiq>rF40fT;U>E8PcA?H-7rp`18SJue$JQC_vULW# zP-n0U--N9**k$VscA?H-7wQalq0V3z>I`E8PcA?H-7wQalq0V3z z>I`%iE+d{_Dp`*BR`xKaLGc z%r|e7<~W_cEakENNuJRe?6SS8aGO-f_Afd7G)(RQKLdUi{LkR$!2iOpbOw9y28~=s zo#Yn0L27K&Nk?iu*0d~|mPOODXj&Fcxc$ zMbolqS{6;qYBY4ZH7%<#(Y7@$o3f^5(X=d@mPOODXj&Fc%c5ynG%bs!Wzn>(W*>f! zH7%>zhtZnG?Oj4^8n<@|t!doeCA6kxH6r_YYg!gf%c5ynG%bs!Wzn=OnwCY=vKo>7 zD{ER7P0ONbSu`z+re)EztVU!%V@=DVX<0Na>w6`XVol4UX<5yc{ERg%i>75YcH6e5 zWi^7^wx(q@jyuJgmepu(+nScum~Pvemet5^+nSa|)3Rt<7EQ})WOuqXEsLgQ(X=d@ z#+_wKx2AD(nb4ZX{bfRHT2}v`qLQO&S^a;CZEG60n+dIH+;Jwfre)EztYQP(*0ii5 z1l!iMY+y~x2G+DJnwCY=vdTv-6HUvaX<0Nai>77Kv@DvI^;c#+X-&(bX<0Nai>77K zv@Dv&J!^V~_KBut(X?z}P0ONbSu`!1wx(s%*0d~|mPOODXj&Fc%c5ynG%bs!Wzn=O znwCY=vS?ZsP0ONbSu`z+rezi9$g^l#R?&`aYg!gf%c5ynMLtfqre)EzESi=@)3Rt< z7EQ~dX<0Nai>77Kv@DvIMbolqS{6;qqG?%H#R(;_r2LenBNEh0{f(6k6mi_o+P zO^eX92u+L7vR(<0WfBQz}{PK(gA2u+L7vR(;_r2LenBNEke^GG%Z5Y zA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBN zEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%X@di_o+P zO^eX92u+JZ$7vCo7NKbonidhKMQB=trbTF4gr-GkT11={p=l9uT7;%WXj+7(MQB=t zrbTF4gr-GkT7;%WXj+7(MQGX`(ypc84yl&$Hm$MTA(b$G4b*>s%iaU(zrSTa3hKYV zW$VAch5GOB;10DGp**hl$m7OOI7L1+{to!>!QTVl0NxJjzrXd&n?U{dw`~2Fx={c9 zE!2O12kR;4ddj(;a;~SG>nZ1YshOW~IoC_gj4tPTDTC4FTu(XIQ_l62b3Nr;PdV39 z&h?aYz1o|eS4%Uxoa@!bj4tPT%DG-G%C^h7o^r0IoEs?T2FkgCa&DlU8z|=n%DI7Z zZlIhSDCY*sxq)(Spqv{h=LX8TfpTu3oEs?T2FkgCa&DlU8z|=n%DI7ZZlIhSDCY*s zxq)(Spqv{i=SIr8k#cUNoEs_UM#{O7a&DxY8!6{T%DItpZls(WDd$GYxsh^iq?{Wm z=SIr8k#cUNoEs_UM#{O7a&DxY8!6{T%DItpZls)VrJQf2oW8wrIq=PlMz>Gj%xJXV zeKVuce)pY>M*H1&G72fDZ&6$de2b#d?bEj?8r?p9i=xqf_brM>``x!F8r?p9i=xqf z_brM>w@=?QxFmEx@;!r2aXEd5pwZ>@9fC%e({~6OT~6N~XmmM!8=#PK`o2HCjdJ?F zKc!Pn-}h(R<@9}jMwip~{TW?O-}h&9Iep)s(dBGcId!In%4zg!QoBlfNSNiX{`TFj zD8=Y6-R+7`mV{neZBKd4xjpq>&|e(d6`vSC40>&|J@pank7DcA7^U0=n(cOR;=H~F zJ`C#C7^Ude7@=;B5kAI~U7&7_QA!V}TVrJRf&HLYx!YOiY-gRbopsK3);Zf*=WJ)4 zvz>L$cGfxDS?6qLowJ>F&UV&0+gayqXPvX1b)SK5{03fXG^YM*NV#*dStTVrH9&Tm)b;Agx--mb_&wt9#D%Ia>r`iSk{^KIL?;ySA%m z*?v2=zYVo3axiWN{cWgSk%RHwAbm=agG>HCQr?gK0qj4){vh^;u<2il9Q+3Qmm&w- z^ex)~ z#>oDh@Ew`~>2&p!cN6)B&_hD+BH(V&;2o^GzeB!L3TyAaC-G3=`}lPFr=B!gb2dqH zY}*T)m>F%7=GZoeo1{59@kg3t+zP%IG*_FXIj4j=X+)?K4}>~tM5q%FggR+NsM}bC zx{XEXbuHfj=p1#@h)^eu2zAnkP$!KDb<&8?>p7d4`)p$Fvx&LSCgwhynEPyE?z2gA zALsQwa0t{%BT5+o_ksICoiw8KQBWt1$UX?>L7gNXao7eL*{ zB3rky2zAnk@D$JJq!HOVX+)@#MuaoiWoo38MwH@}oJ~?5+jH2@V|yiMla$BlFM|I7 zo&lFYoiw7q>ZB2&P8tzhvbfdW>G3-lSQNQMa)Ko1{EO-Nqu+ zNh88r{8!C-^iF0yo1{FpTS-hrA11S7TMNGBSNpDZ;}?-)=48moirlMlA@DFWJlOKX+-uN*g9!M z_IhlcG$LCkjR^0=)=49>b<&7XCyfYo(uhzejR^4)nxYmx8HGg^y$ zcb?H&mp3z$5yYr0JBHx{7v=;g9JfpS9cjp{Xcf9S}^lV#;HlszpO;1mvMVrwg-=?Q$ z&?4WaXWRYAx9RCgw8*#V*|rw>Ha*+cBHyNG+gjw?^qgWX+Kd+YHa*+cBHyNG+gjw? z^lV#;e4CzaYmsl$vu!Q%ZF;t?MZQhXXf5(>dPZxJZ__hci+r1&@jtrOXpwKzvu!Q% zZF;t?MZQhXwzX(;NWVjie4C#CYAy0@dbX`azD>`zwaB;W*|rvKMvHu#o^5N9Z_~34 zhiK7e#YJY)TIAdGjMgIGrf0Mk`8K^};T@o7Pw$d?7(JKqZF)w}Wqg~S(Q_H!rf2kA z#<%GiJv;DidPdI(e4C!pvAu88GdiC4ZF)w>>hDtfG&(-_ZF)i?WZ$MITO1l4Rr)qP zqvJ{6re|~v>D%;-jvIZOp3$+QZ_`^2xc5rv+Hvod(6#$RYRA1-vRymwy%M^1+bF7HYQz-)*6GTkzc$ zYPSX7ZJ~Bs@ZA<_w*}vAp>|vF-4<%M1>bF7JRn_-)*6GTkzc$YPSX7ZJ~Bs z@ZA<_w*}vAp>|vF-4<%sp*_HzK}Sj_w+J0?cc`XD-8>@nNY|nI8g+7uP$#ztb#jYP zC$|Va5_K>Vbr2PIFcNhz5_K>VbubcjXg8*xx6XH<@EvG-2ddtIN_U{o9Vl}Ln%sfv zcA&Q%Vne?b8%FPP=?Jo*PHvH{lUsy3xkYGg?9g6Kr|aYvp-yfII?_71McC|LrGE`{ zkM2NKI?$62l%xX<=|Dp|P>&9DqeFc9d22-nD$#*Hbf63!;RAku*a_<77TMocF5H_Y z{8hD__b7McuL=JHdpNfepKK*Q*{XPBDcCBuPYJzqc&pepzKeA4xZaxjL-21%`5O2z zxCeX$d=$*_EE&a~-Y@oy-f_KE>>0_69k5&30lPKWLV5?kdIq}&dgt&~u__d+ zM$hcF5=U*-xT9P&z8HT8^p5MT8cmFE0B;B12)+q?Gk7QX7VvH01Af0)H9iP>=kQ&$ z-n(eMcLh82oKcLfiU@{r1QSFqbDc>gZEe^>gWO1T^U?}q=ogS+(n z-GN)h-NAOyGvB*|`?3EEcBgW`Tkm)J=ShDEdpG!XBW&Ca8+R+0<-oTB?GbvOdyjH4 z-V1IAUH*HNi_=|;dsOmM!Y}x@!5209+!OqTYH?5Sm!y9Q{44Ow{PnM~y@qyA@G$lx z;G^JU;Nv{`E%4jmcfcq3>yy~s*gaq$_!Q~=*iRdYG<=7VN}KlD&L@LTmHCr!@=5Wm z6l(n``DiKllzb!<^TuBj-iz<<#dr7OyL+kiy?Re)a4){Q7vJ3**mw8hyL<87z4-24 ze0LwdyAR*phwtvgclY7D`|#R*_~<@7avvVqhA+19O?Dd|*{0v#6KvCOjoU$w>D%-M zr|iUjP&{mtN1Xmem2;as;*`Gxzoc?*3;qiG%l!4Ls_C}Ce%TiM4e1YqUeDYXJc|7o z_zj+XoL|{H+XCyxw%|M96Qn$e-NlpLr1XG&;8XmyANy%z+B>7RrM)w18(-YE;k9je zZJWHNQl&qlw{6E4+wsMAe6by0Y{wVd@x^w0u^nG*#~0i2#ddtL9bbG}zg-SKt=}5m zdUxQR9e8I4-r0e7cHo^IfqT{te6%BQ&)T6J^($J@4!pKQIXc}fYDeInwF5uyz>hm< zW1peSpP|g3A>Ypg-_(?x%M5 zQ@fqiWhZsnNnLhQmz~sQCw19LU3OBJoz!I~b=gT>c2bv})MY1i*-2e?QkR|7xYB_3>Bb$8KzcA>hv zP~Baq?k-e!mv}g(XRNxr#6!Q(y?d7!I3%>{?h*q=tL`o_V6^J)qVBs?ciUFoU8=kP zYSrDPTHChj?ozFdR^45ywQZ~JF6y|8I_^SsA5`u7g9lYRA#L(O+T??@$p_UYPbu9a z*Mqdl2h}DI$=*f!=hc=TRBQAz?pY7&{d$kyZ~UmzKMy~jhndgA%;)J@pQmR%1h)^t z?L*4_Q1Fm)H*N>51`jEBr&tpnqWlk0{x7H`OTicD9bceFe1Z1An|JQ!oxAbZZv3?y zf9<9`yYbg+Xe3>_VRV*C}zABc4`0lI9OSbYl6nss6zd!hz z*jN&N8T@PTaqyeqx54j#{|$T+e9D+k`wi+}#&ts9>9#C%nIERi4^!qnD#=o?MPdQ@y1U7kn9>XPdGzp00Q zU2hZWSIfdLgI1xhqcC6B8=UUieO>Rd{T zKFM#N5}j_Y{Od@ymhHPD;@T_V6O}Ix?ryh_PXRv zJtJ=#*MVNw@;x}Gf?kzjN$3czSNR$pp*=;}o}z3|QMRWj+f$V7DatmWXAT7edPW!w zh|hsw1l+GT3oWzuuB=!{PC$TAK+B2qs^l8%1VE-Ff z0jppQTmxgU&hv@w&~ev5`0GvyZxPP}p|yG-Y{9VFXZh7R?DL@a=nl$j&gBw#nUpKM^T#~%6Y!_tOW;+W{2BH&@H)@m z!2U<^Fc|!t_bik0PuTxVc~-zx(r<#V@V0-$t{T;Z8T5p)bcn6`2broY0I?q!2%&$S2Bo@)=Lz2AE< z?YZ_~+WWl+(~iUj(~n_0<{3=?EofyMOn;MfM>T_KM>2!yLGT&=`dtu@r@b;isFv*7 z9mK}_>BHF1^5hZT_CK)wpDcsvqizZ5WBlqkI1Uzgh8B`O$s4A@BItGa!L)aG52n2i zKbS6K|2@B=Ev4s4e*vz%>OPpJ{iM%e(`M4%%RQK;ouvK$DTC=BgV%V^4e;mocp6`) z|C!(ZFVg>oC;t_D1$!0yWo&E0V7fwGyq+_d_Il1>I`JFA6zI`vFl_RZp~s-X@PGGj zL$7NMhF<3x3||G_!jm2!2SZ0qgJG-d6}|@hwfy!sdGfcMOZeN^8UFe@J(;6#=IDbt z`e07IZ%OIav0U0MEl11A(N1!-kQ{9zmv*bjrQIHKY5Oskwg+?ai_w~sOaBm@0j)f_ zv{}lf%}*|EW^$^#P<1p~t8-EqqsNF`=vq8O$}^<+{P{zH&z~2f(nF~9P+*lFLZydL z>7l^tHxyW;tx+6|%7LxDXqgh~&g(nF~9P}(Xzgh~&kt5+6)h+tKy!{IO-4#VLv91b(m4a4Cu91g?bFdPoU;V>Ky!{IO-4#VLv91g?bFdPoU;V>Ky z!{IO-4#VLv91g?bFdPoU;V>Ky!{IO-4#T1EH8>RbUIQTU;Rqa# zz~KlSj=EZ(oN*y;a^H~$OvzhbXouVTN9 zZLjTT^xUt})3!&?{Te-Od&JzY5mOAvgQ`pTo236X=uvWi_&WX7HiFN*^CpA9wmiQtYEqdbjT%(Ua=e#?LvOemzRR9;IK8s$V<(X>cF-eZP%< zJ*s}~-+Fu*RlnXN{5x=hXD9=Gd6d>ZN?#s@?NM6$D6M^zemzQSA5Bxj^h>4pbZ?r`v>TQ2jpu%c>%lxy7wJapE@M;`oKZvvj^3lZGTnI929%TAAo;nRLS)# zm3b-1(;xH9NAmQ_JerfISLW%Jd3t4@UYSRW@@P>$@O&gM{~i*0K9Ua{L*|)}yYiEskK_Z-NAkgSp7(qtA9y~Jmp=GCj#2Z{2iu;H zuh61M_HLp7}^V?fFPP?fFPP?fFQa`ADAmNS?7QpZ0tt z&xn>!dp?q9T+63DAIYa3{pOjEH`A9zWd?e3&B+q;#kD}(8kK|F* zJoAyfw8Bq%K9WaW^UO!`%t!K!l6h&Y@|Aih7v>}R&`O(^((VZk1>Z~kBsi4*x%%B9 zl;;qdbC^DRn7(_X3IZVqrOq)53uMgwp z!|2jsl=Cp^bQtA4j0X?nyTfSIVU+VQ+#ZJ2!|-{SIN>n*d6+oiFmb|RYH|3NwSa-c z#0k%$Y0si*&!TD1qG`{fY0si*&!TD1O6Qk@XVJ80(X=tx7=w*5*cgM2G1wS`jWO65 zgN-rR7=w*5*cgM2G1wS`jWO65gN-rR7=w*5*cgM2G1wS`jWO65gN-rR7=w*5*cgM2 zG1wS`jWO65gN-rR7=w*5*fqSQeLQf~cN{j3Yee=lGobh39G4~=SBx-!9OjQpwe%~gmecUi2~S;rM)`#qEd4v(j2NuLK_;IEE6kE?eZ9o-#Q?>7Dnyv{Q> zLC*w_6MG*g>OKy`$3u_5$3u^{$7vzQX(7ke`<&A1-)g)zW=MIR>~X%zjq_D*Ts-dy z#>H*F@DR4S9T%%kclpOP-ubUqq;c^k>oLY}d<@7eG zoS*dAH?H~`FM+P_ICUAPF5_x5hm_)Z(75WN->NQpUbV3OI@u@a1t;hQC+Gzy=mjTe z|0ihwCusR6X!$2-`6p=kCusR6X!$2-`6p=kCus90XzeG6Pfie@oS>bbpq-zfou8nc zpP+@GpoO2Hg`c2>pP+@GpoJHRKng@41tO3FB`*+x6vTXIP!RL|LeC2d)Tls>3Pd0U zB9HB7108%r9cEypv@GBKnk>+0ue}o_ER7N zDbR`vL?8tskOC1%fe55P1X4&l0x1xI6o^0yL?8tskOC1%ffdmLt+7A^QlL#1h(HQN zAO#|j0ue}o2&6y+QXm2;5P=kkKng@41r)nL1X4h^3q&9VB9HcRswF$+D}IAoukAh9p1)71^*Y`2_X)LL+n&EqsNEVpf1hCfK9TnP zeL^kJ>7Kt&s0G^g{Cxs#oIo2V(8dY1E7cl>oM8SwL0g(&{yu?bPSA2DXgL$KoC)Ud z6KWfN^S|(B&)+B1Hk^y+?-Obpwi6@1o?!kyfv+c+zfa)b3HetH$g}zt^Y;n))W336 zIl=sWlIUWR=wedQ#ZoXSpBhKN{i?;J{Oc4)7n6ZUz{%iQ(9y*t(Zyuo{{om~Oq^6) z;q)2Mam6HY#UydXByq(gam6HY#UydXq~Z$wiil#8h+>klax(qjN&i0Rh+x#hXIwrihoOXlYYKO;fbDDRgWK1)C!BoT7D2p)gZu%M_|IMO-vR%b8+a zo?={{VqBhLT%JM)rieUGGUGVOjN>HFoaC8Pq@N=F6zQi(_w9s-0^d$3R9o63^f%&S z;25>Ys&7&4#I{%Ui)ttSt5<}I8e5I-`$dhOM$f;BtojyN^)0gMTNHcxt=frlQ9CjE z8*!0U-y*BNMOJ-_tPT~^jvR^_9sIT*VEgMsQSHa+ zQQX@0%3G0D-y*BNMIz54tG-3z&myb7MX~MY-A{|G`WDrelp@AX3H^<@DBf)Q>qC)M zBi}H1DDVw~LO3kJVF?aPa9D!F5*(J`ump!CI4r?o2@XqeSb{^}-=}xNVF?aPa9D!F z5*(J`ump!CI4r?o2@XqeSc1cn#@Qvk%^a5Cu%te?N47aE!C?swOK@0%!x9{p;IIUT zB{(d>VF?aPa9D!F5*(J`ump!CI4r?o2@XqeSc1b69L}I=Gich3I9v{9(6kvbY1^%F z22Gnm(`L}L8EKmTYE7F#(`Mj#22Gox7te@oKjRtGjK(sfXG}9F+YHJ!gR;$_Y%?g^ z3^S$~di@OgHiN#+pl>s2&zNS!w$b`FBZh5zZac$FVMg5A_KahOzCVN3&7gHNXx$8b ze+I>yLGfl#ycra4MvCV*c*ZmX^D}Th1KTs=S#L)7X3)JEbZ-XTn?d(x(7hREOf%@- z47yi_?J{haVY>|5W!Nsmb{V$Iuw91jGHjP&yA0c9*e=6%8Me!?U54#4Y?ooX4BKVc zF2i;iw#%?xhV3$JmtngM+hy1;!*&_A%dlOB?J{haVY>|5W!Nsmb{V$Iuw91jGHjP& zyA0c9*e=6%8Me!?U54#4Y?ooX4BKVcF2i;iw#%?xhV3$JmtngM+hy3El|C#7v(g8l z`nAzJ%I1Q9)Vk2~@rcpT+h{^7D$gj6Vne30(0r>?3-f zeMHZ*kLY=^t+$D7<7fS(*!GiO!QKNt3O)vUU+(jYl#FBG3q0@t@p)dcjnV52&nuo0 zDuyw>3T*Y0iddZT+u-YzGEd#-srx*2pQr9Gkp2ScFOdEM=?lb}3q+U;M3@Uim5M;{s9Q0`cJjk>LU{;R12s0#V-r@!kT;wt%KBq)TFZAzcPNIxG;yEfBvg z5V^yY07+>GM}c*rz!JU zm_G~iXPIlC)kw4)oYhEVydpNvs^qq>g0C3y(OGAjWSL@272B2ti}!YOx?f*Z zYcaZCU!-4Oq+eg8UtgqOU!-4Oq+eg8UtgqOUsSu&Z`H1h?$;O9u8i*27wOj*rH6jA z`}IZo^+o#iMf&wc`t?Qn^+jo#o}^!2q+ef@rkx5dF@juT1i7SoEd`fUBco?Mm(cl3 z==>#>%_*KgUeeo)uM=Lzr1BL+8J}Lprzd}#HLQlU!PrpJ>zd}#HLQlU!PrpJ>zd}#HLQlU!PrpJ>zd}#H zLQlU!PrpJ>zd}#HLQlU!PrpJ>zd}#HLQlU!PyaCt{}_gU3~xV%x0gtNiS(C9e~I*~ zO5YP)Rk{$5T$M-qWnYrVui}xbs_7xwS4n@x>3V~n*BgvG#m3dNSD&u3`gD~wrK@=A zsywB)$y3JT{B|64PrNFxIsK&HFCL6m>8tQ?6%Sq&8&0>9T-ExFvBDetU*T8fM`Pk= z@Z(kdcvXJXo8?F2Zwaqa(`(f98a2H}O|MbYYt-}_HN8enuc_^w3a(MpYt-}_HN8en zuTj%$)btuPy+%#1QPXSG^qS&rzri)VMoq6#(`(f98a2H}O|MbYYt-}_HN8enuTj%$ zYO#KgYkG~EUZbYhsOdFodX1W1qo&-F8E{KxaGjc7S522?TkWq?)9b3KZL9rtdKvd= z2HdA9^f$-r^s?*pvg_31I=$?=YN21z%dS)M>-4hgl>9oq>^i;dI=$>Vz3e(=zD}91 z)61^Y%dXSQZqPn&&^~Wa<{Omx24%iMnQu_$83Vm$_kFU_zR_JRh^tBcG+6sMb z1@EuW*H-ZU3Vm&bzP3VNTcNM5(AQRI11q$F75dr=eQkxlwn|M`sp%>;U8Sb0)O3}a zu2R!gYPw2ISE=bLHC?5qtJHLrnyymQRcg9QO;@SuDm7iDrmNI+m71;U8Sb0)O3}au2R#NY1J>&s$Zs6zf7xsnO6NW zt@la$yj-lvGOKkZmuUjz*6WH>u-I)y}r}Q{7~&yvbO3ldZNqX%A1UpHyJB$GFHAqJo5_i%qzq* zuMp3?LOk;d@ysj4Gp`WOyh1$l3h~S<#4{DWVNX!uyI4ihntMFZ{!gsL>-^D5_iQnU$ITcz|h3{gOz~99xd>5+(UgN5$w0_b% zb1H$qaa6>-e{~MqJ98@Xf>XRRr=m7#^v;|LEwd7MXHG@lG5Wh$CGgIiirT85^v;|L z-^D6{S7IxC7pnx`nNyKB{T_c8tH`Iey)&mG_Ke<{Q{lTJ+#7i zu}a!Ib1HlntEkVazI+#}r15^*J98?m5?9o!{WkA2uc&R?_J0ag)W`iR@64&Fj~g91 zRMf|9duL8X?ceB~IThBEE9wh=gLmds)FW(rE>q#VSVb!#PWN}Q3g5*ld>5;z*EpRv z!`F?9)<*nW|EEAjy~*f^tHO7&igZIB=et;i?_w2Jtt;wre)3;=(mQi1tYBBv`)qq< zxFWT2`MoozBDFDkXHJFhVimrNRZyM^%2VN6Nkx5DZ{S-=MLpNHBf1KTRN=cxMLkjV z;=5Rd_3(;%x1aRRoQnFmZGS_lsJHG3s*Jf+#@s4nZj~{&%9vYa%&n>iEeBP`+^Twt zZO_iCYT-uD&Z>;LRmR*ZV{Vl(x5}7XWz4NI=2jVVtBko-#@s4nZdENxZ)41@GUiqp zbE}NGRmR*ZV{Vl(x5}7XWz4NI=2jVVtBko-#@rgUt5L5SCuP-ia>b#b#(62V)E&yP zmU=7rcJMv&4tHb=w_?8+d>?=PzrhcKe@gmCus@3ZG3>j*Pk>(GuW?dnE%h+=9?<`N zTuVI)dS+Tnb%EVr57-O#f&HMrHP<*Pw3Zse9tKCieW2HexxZWJFJIi>Ej);w2mRHL z`@4nyvcUb_La&N*f49(IKWnK1==IxLY7+E(q?S6xlSS+wV*8}fT51Nn%#%ODp2c?W ztEJ|!pU3w4Gk1auy~BY!!G#{VxD#CH{WIJNF7y|cTFPy&mbwCZ&R$D7Vz22W7NbuJ zt)(2j*K|gf(W@)9pb7Nq|h2Ch1P;U=FMA4r(FfKD|$+eo>Jqa(3(yr(XTiuw8mLF z+<2~(?fxw%h1NJJv=;iL(3(!fQkgj^v=+V|+b4zAI4QIiW=Xl7lnC1=h1NJJv=+Vz zdp+qsDYV8(p*5X|WqTv(Z^3>mwoeMJg>T1h2RDJ6!9M{12z)n4pW-Ya?qSz&-%l+* zz+e9a`-9jY!lr+P^skWq71F;#`WGjK*20hTQfP8|iUIdSR-pfx8>`8#He z=EP`DoU-P`Xil86=EP`DoU-P`DQixgvgX8SPMosl#3^e|oU-P`DQixQ=ENy$PMosl z#GFnXqdBq8<#W0PJ-qn zXikFWBxp{8<|JrNg61S>PJ-qnfi)*Va}qQsL30w~oCM8D(3}L#Nzj}G%}LOl1kFj% zoCM8D(3}L#Nzj}G%}LOl1kFj%oCM8D(3}L#Nzj}G%}LOl1kFj%oCM8D(3}L#Nzj}G z%}LOl1kFj%oCM8D(3}L#Nzj}G%}LOl1kFj%oCM8D(3}L#Nzj}G%}LOl1kFj%oCM8D z(3}L#Nzj}G%}LOl1kFi^a}qQsL30u`CqZ)(G$%oG5;P}4a}qQsL30u`CqZ)(G$%oG z5;P}4a}qQsL30u`CqZ)(G$%oG5;P}4a}qQsL30u`r-9})(3}RE(?D|?C`kj&X`nd` zG^b(BNvHJW9-&rvggOyjcpJ8&P1$#VQg7Lc6@~9<^b7wO+zP%Ils+q6rw|K24E`zU zAHn`8_Q$aABHvG7f0AG66k`2Krw|Jt26YOtY@I?Z)G5Tm$9S>}>;`+lUa$}B2fs^R z-vhOFq2CUJ`maFQ`@sF6{)0~``i>*iDa68qU>+O;wYsHredQ5q@0Rd5I1Zkm76nlI z5A|2=H5KXq1N_=+R-6w#eOyRYp`F7ty75gSDivE)G5S5okA?sDa67zgLi^& z0pAAxKB&=O&-`DYVgT7Xg;+>?lNLE&&El9+yugBIY#Ikh?u`o-DP9c^ZVZRYurw}Verw|L* zW9t-R*&DF$#NLSg7VNiTzYY8C*zMpZa5MM^;2(kS2C2Kx3)P$7N6P!LKY;xw*dN6H z5cY>b`kl1MzoOqsi)`P;lOM2|~QnWs4`zW?%D6%K8Cv9sllb+EUn(c4P4#_bj$B-Puz&VE6 zMP_u4q4tIuonuIjAvuQR7?NX1j-l2$m(n3QhFaT{O^zWshUB=89M_TKI&xe`j_b&A z9XYNe$93emjvUvK<2rI&M~>^raUD6XBgb{*xQ-mxk>fgYY?7XLrki}npYWaFX7CSE zuTjc-RIeuK`5xg`@V(&s;aOA)VLPz=uJt zNGs(LP%F~1bL9J7-tawg9|DI#bKWGCHtq*?j)&|~@Bnxa%!6Z~{vS%u90T?L*Rqd; zSyf#Qq_+R-TnUgZ(4k@b}>Jpw^uA*B8Nm0QI#(DNEov z@B(-Vyh4sY0bc@t23mESP~9d}w+Yp4lHTfVQd;Ay!PkOT*Cy1pN$P4_=V}Ud8?sP0 zhYGE7LjWdK^C-z3{w_v{&`)$~7$8M)on?RkatsHgYxA2d^cZ2T%-v@pG z{2+)fX{7V>I(1X%7@$cpw(%bDQy|`C6l)4SiZwBcHTf)k*&fB37{!_x#hStg+$zFO z@Ig?wuWIzNqBf(b%_wSf%8J^YvZ6MlsLd#9Gm6@ra&KzZto)SF5ppw%s!@=1D{3=} z+Ki$$qo~a&YBP%3jG{IxHg>*N)Mga5S+TKgD{8Z5+|I>{+N>G3(Tduv8Mo1j+Ki$$ zYsT#-M?ouUv*KQ(6}4G2Zln8JGm6@*xYxE7wOKQ6qZPFoMQuh=n^Dwe6tx*eZBAKH zn-%vuUn^=eirTEXw%=eyZPxtS=w956qBbkOwQWUhMp2s;-`aM+ZdQD2w4(n1B)xxl zRM&m(JF~}l^lV0?LO76)3aQPVhT8b?jzsA(KEjiaV<)HIHo#!=HaY8ppPQ86X-7>b?WpOb9X0J|_d+{r8b?jzsA(KEjiaV<)HIHo))PY?X-7@tsOh8~ zHLYjjF3XOZ#!=InRaGm{JeCkgP2;F(95s!jrg79Xj+(|%(}5i|9oSLRfgLrCqoxBp zY8ppPQ7xM@{3XX&g1JXOy}IJ)<<*QPVhTTH_1d1&*4=QPVhTT5}!Fx1**t*Wt7s zHLdZ5bL^;TjW3+Gqoy_2;j|q!t?`A^cGR@S7f#zz)0*pW+K!smT!+(k)U@V0oVKH; zHP>OZqo#4xG>)3qT!(Y)sA-KXjCRztW;TrY5{{b2QPVhT8b?jzsA-K3e54&UjiaV< z)HIHo#!=HaY8ppPe+`)PFam-WvdXTi|D9W@N$Efch3ANTj z`0dg$XQLW$oZpL+?uL;5xF zb?_$~;~u0;YdL(jIdC5QEx&Sidgn#Qc=d(QQFocwU;OB#F7Wf9=O4;6zi0d+2zx2mOa1TWF!g_e{}=dwgZ~};OR$IQiNF{f*7bzM9wD(u zNbC_3dxXRuA+bkD>=6=sgv1^pu}4Vk5fXc7WUh0DjOIdOkC50SB=!i2JwjrSkk}(6 z_6UhRLSm1Q*drwN2#GyHVvms6BP8|+i9JGMkC50SB=!i2Jwna7`5GL1gv1^pu}4Vk z5fXcZ#2z8BM@Z}u5_^Qi9wD(uNbC_3dxXRuA+bkD>=6=sgv1^pu}4Vk5fXcZ#2z8B zM@Z}u5_^Qi9wD(uNbC_3dxXRuA+bkD>=6=sgv1^pu}4Vk5fXcZ#2z8BM@Z}u5_^Qi z9wD(uNbC_3dxXRuA+bkD>=6=sgv1^pu}4Vk5fXcZ#2z8BM@a0Uy>zS-Vvms6BP8|+ zi9JGMkC50SB=!i2JwjrSkk}(6_6UhRLSm1Q*drwN2#GyHVvms6BP8|+i9JGMkC50S zB=!i2JwjrSkk}(6_6UhRLSm1Q*drwN2#GyHVvms6BP8|+i9JGMkC50SB=!i2JwjrS zkk}(6_6UhRLSm1Q*drwN2#GyHVvms6BP8|+i9JGMkC50SB=!i2JwjrSkk}(6_6UhR zLSm1Q*drwN2#GyHVvms6BP8|+i9JGMkC50SB=!i2JwjrSkk}(6_6UhRLSm1Q*drwN z2#GyHVvms6BP8|+i9JGMkC50SB=!i2JwjrSkk}(6_6UhRLSm1Q*drwN2#GyHVvms6 zBP8|+i9JGMkC50SB=!i2JwjrSkk}(6_6UhRLSm1Q*drwN2#GyHVvms6BP8|+i9JGM zkC50SB=!i2JwjrSkk}(6_6UhRLSm1Q*drwN2#GyHVvms6BP8|+i9JGMkC50SB=*P< zdt`_`GQ=JkVvh{5M~2uVL+p_u_Q()>WQaX7#2y(v2^|SCdJ<}M?2*xvP@`jyOv158 zCgIp4lW^>jNjUb%BpiEW^c29yIQGbB=HKYpBSY+w(d@m`jy*C7_t6<*j|{O#hS(#M zbnKDQjG}g=Aoj=*dt`_`GQ=L4q+^c^u}6m3BSY+wA@;}+dt`_`GQ=JkVvh{5M~2uV zlXUEnNjmn(BprKXl8!wxnzwYhjy*D(y>!~KM~2uVL+p_u_Q()>WQaX7#2y)9k4*AE z?#r=9M*C+O-8*N9Ju=#8qnTvwbRs=W3b$yCRxJ$(y^luFnRt&zf}IKN z7Z7v?ety)c`TWzty~^Jq^i0&f>UWHP0p17Rue05&-pBba_g-mC|4ROq&Uvr;qY>dl zidygW{u;uE!AC&HocGc<-K)OI$7nwk;Q*-pP?XkwC_>l!z3Q8c!{C>}|A$}yU(#P8 zt^H7R%pUMb@<&LI8g*Z~PTiML>jr~vy)_UCwVGGxr={KU5To|96FScCmXjDgis_bz zj0;zS9=~++OtV`a;$!?wv)lXG3H?m7TOMNcGtF+iqMIj%-SP_O_$gsG&j-7C-q+2O zzHXlJb;~RCtGvSKCwJZQ3ZtLab>kJ?cty8-Kv#tibmIfvJZ0-nYE`rHwW?Y8J0tC} zJ4pLp0?#yd^L(wF=TqI%r_L;W8vQh?TlzHmIaD`Kpt_|`r~TBaTlzHmNmIAqd27@Y@-|7sRtrr5p9Wd9YUM8W;Mx(psr&Qt0!nRa9ftDjlJujoJqqV&uakrjNZAg3`{6gY>rPqRg4z2@VF(zw$OtKFA z963esx5nTz&JR8dei2-6Og-pdQ-4SL%fkCq;{C$UgD&wtO1v-O67Ng6#QPF1@jjJk ztOH%*eOlXSbcy$=MB`_{FM{ihlz5*?bo$G}jWE0shBw0SMi|}%!<%4ulYIViut`ze zq)=b65NgGs@CY~#9tB_E*9p>o=CUdI66sgKZ-cLL%({y!X|2AQ?SLy zD?)SrL*T>YY$KfopCacO()x;pj+}70{;q;hU$GFLKg^Z zpODrXLZzp`UxI#CzA1Q%V-~<0;~DQT3%9)s)dsFgL6JHNHyD zFF?D*X4SazRpZ8o!EIu1v-(rxVUBSvZx*XQ#!opni(CJyFCYnBznj%d8eicU$`X@4 z{K&7ALeYzs=;LOiyGcx;Q5=3~s;7AehXGq6Q%*=h5zMe&%^USqRG z3N)IHE&iUia0dJ>`DSBFDg~CiM8EMTd=F`JvPJDwXF#hl%)~GgYpgmM#2Tdtj_lniWuF-8ofH_-#}|PhNT#mVvR=iD@u+ThsGL*I>)MxQFW{_sna{bU7&Ry zYh-G)&SQ;Fo&E>VGik9j@0=Gwt34KDF8w>8)gJqOL*Y-!`4#Capq(ey$kb@f$AL8; zqxo2ItkN2*>Q{|YjZ4%XV`<6wUUEEp7Hh0J8T7(lFYNWAt6p@~%NU^-UG<`?UUb#V z%7P1(* z=&Bc8^`fg@bk&QldeK!cy6Qz&z38eJUG<`?UUbzfuX9<}RWG{gmG4DLTUWj4s+YFb zi>`XnRUgds!Au{z>O)t3=&BDt>_b<5=&BE0^`Waibk&Eh`tZg+Sn7kNK6KTGuKLhb zAG+#8SAFQJ4_)=4t3J(jOa^`UXCJ!iLsxz1st;ZD;iY}(st;ZDiMJ8`%ev}ASADo> zAG+#8SAClO@R_ZvKFxR-t*btC)rYS7&{ZG0>O)t3=&BE0^`Waibk&EW_Mxl462q5+ zzY@2XgTEpDH>4jTdU=Tc^dWlBhlnU1l3FeY4@oUXM+grQAv~o2P6iL@zmvhk`fntx zFe>IbEj%LEdRQ}8PCL4Im_GVp`sjx>6QzHt6dkWpj9Yv>J@vziE_A%23mJ=ot7BddWwm3a5Vwx|e)Js&LK)@VZe-FgjX( zBzW4#s5YHG0lEi#M0Mw!Z-L(d-RnJ~T64a8y+>3>PU}4^;k)4PjP!Sp(BD0xI&zNQ z!xF9#_QQWa{P(N9D~IT@U#;HhXLaU&qQ`!*>hw|2(PO_Dc8;URexk>If0aw=Z-b5= z`~6iep`*us)q>H{V?TA>PhIyDJ@ykl_7gq!%Q18wG|-O*`UCgN{eh#$etCt__1lj& z`q4%|(PO_{!oPAQM34PMkNrfC{X~!bM34QdWuMdiLcit!jgB7si5~j{N00r1qsM-K zl}lIz9X<9FJ@ykl_M^#uG}%w|*iZD>PxRPN^w=+j=nDuaWGf2UibA%ckgX_WD{<6T z6tWeCY?W8&UnpcN3fYQ6wxW=&C}eA3g=|G3TT#eXwQm2*3fYQ6wxW=&C}b-N*@{B8 zsuk-<6tWeCY(*hkQOH&l;+-XT1m0OvsOadjaKD^nn^X}A$4O6s-{e=l&!~K_u-%sY zN7DM5tI}>++oS=f-6LCnG^K)*gptACVM|0oXmC=U534*4i;^HJL7qj=+^xZB+t0IdkvZx}9Dzc~|iz>3HB8w`rs3MCh zvZx~KZ~O*XRFOp$SyYil6q^>EUL(&iY%(gqKYi4$fAlYs>q^>ta{tiI*(P6MHN|8kwq0*RFOp$S^DBE zs>q^>EUL(&iY%(gqKYi4$fAlYs>q^>EUL(&iY%(gqKYi4$fAlYs>q^>$56#%sNykH z@ffOj3{^aaDjq`>kD-dkP{m`Y;xSaQoil9b4BI)wcFwS!Gi>J!+d0E_&aj;`Z08Ky zIfHkP9S^*FtdKM8;0!xBgP#35pED?WRgLW63_Cc(4$d&Z83s7R06p3OJ=y?0+5kP; z06p4(R5}?9(4!6bJCjPgM;o9=8=yxUphp{^M;lPY>to!b4d~j8?$HKxZ9=YXfNL9| zM;p);I^Xjl1N3ME^k@V0Xan?U1N3ME^k@Ttd$a+1v;lgw0eZ9ndb9z0v;lgw0eZ9n zsYq8V27LaXkamwYK#w*+k2XM$Hb9RyK#w*+k2XM$Hb9RypmCtx5qwS}3 zo%Cos>CpyJ$RG+CL?MGHWDtc6qL4upGKfM3QOF<)8AKt2C}a?Y45E-h6f%fH22sc$ z3K>KpgD7MWg$$yQK@>8GLIzRDAPN~oA%iGn5QPk)kUKpgD7Md3fYB1cA=16C}bB3*@Z%Op^#lDWETqAg+g|rkXEnLnvejg$$vPArvx% zLWWSt5DFPWAwwu+2!#xxkRcQ@ghGZ;$Pfw{LLoyaWC(=}p^zaIGK4~gP{N~?RKkAH+t4?H~si-`tjZLcS~LVbr$rj-EQ^8 zM$aegX4Y;uvv#|sE9d+kc#H5W{vvwt6@L*u_zJ&%g<)agPVy ziCZWgP6`i#o-2MriZZ@R&M!dE>^-3~C|_qVdan2hY38)hbHz_cCqBkAEl)@-{?&8E zPe?QV)pNy9NG;BJ8T4H76Vi;)bHz`nu7#@K5uxXbpHQ9Zc(t8LMM$12-lJ<4(%$!| zy^kpEx#B&v_dTkYaiu+1yodRaJ-TKcuWL5`rOy+1R&5WnAA6YV*nXWqYCuzS=(psNXYt`ALfB*L!=r;lgwH?$*jeb zYJ>W(T8)lW>vQ@8N{^tu5wtf#eU0GHBlzr0lpsuBEo1eK1U(h=%q1b-gE zpGT;R5&U@se;&b~N8o=%{OdgMKY~Ax;LjuY^9cSt0`ns`C@wLION{y(Xv**Pn1m%z6;@?S~+hX4M5T<2wS{*4^3@g9|1`aJWbuW`%*=^J3d7z93B;JNhC z;3lxl|B|~JH~MVBf9FU)=@Rw}1ZQp4> zD<7rD8KuV=l^Zz6ZZN7ZnE4Fup++?}bpCQPqY`i(;ZLf50w7c$Q%)VFp)G_MKjTvyGf0eGBjK}vf65q=hd@tkfy^ON= zGQQp`&V9V+O!hJ^-ph!1FJs}ojDPns^4+Vu(~*pJ_cGeuE5|z>?33deL!)|Cpo(Meeyu1<$lVS`x)KC?xTm@M-RJCJ*@MOaHPj{`{-f! zsfYD{^WaP5yNBJUsLW^h7HRjh`-nRB(cA8mqI`_|+T}M z?uEa`J${XQ{2EvLHLmt+Xy9vTfSv1ur-(_|zg}s_PTs%%w9t3$UF^q&zH9cf7yfPH z4~37&!`atf==RRO_CmLD_O%x}rg{n<*xg=fx5TGl<0~ycRHT)ED$kS5h<=|;)(l`aa33>+pX(`kAZ$|l^ zaVw}VnJc{$)c4|){yXp(_z$4x;h&~Qds^4#^sm4xpl1V~mKu$oUwvAdG-g1@gipi& z(^97M|C8_;V&G?pfuAAbeTInl8KV7Xi1wc$s(*&4{uwmz47LCF-Vq=eqwgD|Hpl4W z#;DCPYIBU*9HTbJsLe5=;xTG-jM^N-!^f!2F?@TB+8o2H$EeLQYIBS@d5qc|qc+E= z%`s|ojM^NdHpi&VF=}&++8m=c$EeLQTyBio9HTbJsLe6>8KXAGsLlP<=6-5(Kef4E z4s$u!Ph_&6+T2fV?x!~QQ=9wcCpw1O+%G?I+O@e~eqwZO?k7IkPi^j}HuqDT`{gbE z)wQ{w+T2fV?x!~QQ=9v_+WlPZerj_+wRwQLI6y5NpcW1=9y!1m@BmJ70R9g!raJ)h z2VnjH%pZXH12BI8<`2O60XRRvIPL(Bae&d>0bT!Oa6p`o2>n$30He7Bx+CYi?HqvZ z1F(HSe&U?p85y%2V9auWJ37D}9f1D>-s34ah|eFy;Sb{Q2XXj=+{;1nKdECpV}Fp@ z*Ms=^LHzt6etr-?KPdiv%rVfj=m)urgIxbX)N&A=9OTLm;`0ab`GffUL45uoSAGz; zKZx5O#ODv<^M~O75d0s4|3mP92>uUo&4=Ls5d0s4|3mP92>uVj{~`E41pkNN{}B8i zg8xHY`62i}#PuJ7|3mP92>uUo7l+{g5d0s4|3mP9h`Trh|A*lJ5d0s4|3mP92>#j2 zK42Gnp?lb8;s06gg`}EU4FIe zKFgJ}Q@qkw$no=tXW{=@uACj=1NMR!dM&}T@P8Qo55xaq_&*H)hvEM)*L)cM55xaq z_&*H)hvEM){2zw@!|;C?{tv_dVfa7Hl^=%x!|;C?{tv_dVfa7HT^xr0!|;C?{tv_d zVeaBE{2zw@!|;C?{tv_dVfa6S{*R#lBk+F&{*Q1kN6`Nf_&q z@OAF!>)g>d80&q5vEDZr!F_`foOgI13B1Gmq|oE3=NM11&%4qdPd&$Y%DcVqP}<`u z@Ahu|rvF7Pv)jAUjvt<5Jmo##op#LZJ>Pw1kEhu4UFh-Db4ib( z@}BQTkEgunyVD*|dCzy}cs#{E??R8K*ymm7@s#&@H+nqf9o~%|Pd%6Pc*=Xb`@bGf zd53rBcs%7D-ktV%$~(L}?eUcNd3W05sppa&PkD!TosIF7cX)T&<05V?Q|_PqCl7(Bmoga~FC%#eVKWkEhtrUFe9* zJGnc@F8@s#&)ciQ7A@8RyW$5Yv+af-mBed$8z4Q-RSX@_iFcfJf32&cA>{p&oQ3zUhPhM zJmtOGM}l$M-8k)ToOUwb-dWPozN<~J;MdQ+p(Q(nZYS!p+*0>mU+Og0$vCz19Q<^Af zoG56Van`u*)cKBP#~EimFSl72JTJEqCim%jo@bo(e9|iwpVv6+PlVrAJwC5-mUDg~ zW}e4UpHE(JS{|kU%A<@A`$)yZkzm1inoEE1bdO ztmoBh_-u}vo|isP3+=tnOP@}=2Yg;Vh>vju^}PBEryVanuh?5J}qq;ApbzjQYeHs7K`GIFUk22eNl-bUsx-TE;dCsGO zJ@zQ;xQ+&%;XF#;ca-Zt%9S7GnvZg|N4d_UxCEjQPW3x_AA`e8@4{?=kV<9ItvhCLS&a$B9pl({mlC=Q>V&a-2Fkj#nSYfsYfD z9496@PE2x~nB+K4dz_f$I5Ej_YUDUIavaAyj@KQhMvfDK947)fP6TqCIyz45ah%xW zIDT>*KRHh9F(H50p&2WyYeN2@G*>>M9(hD*ufUm5U+nY*Xq`-OM-$9#PUyb$U-iO1 z=KG-MkSF9Y{;y{>C+LMI)C>EVAA??zJ0bt^kv}6n32J`_<#^_KLcOrj>sTgexf7~! zm!!p?=xvOQ8GZ3H8g)(f$s?-*BGGb57uR6Y8U#ruH@G>9prOC*cxypIMUB|Ce)i7m-@cEzk|>- zOB3qje54(ILOq?+UR5=r{%%Kbg5LZDz4-}x^Aq&uC+N*j(3_v2H$OpdenKtfa&Us) z`~^io1dUJKS6JPg5LZD zz4-}x^Aq&uC+N*j(3_v2H$OpdeuCco1ikqQdh-+X<~h75hYRI!p&a9a93z4pBZ8b< zXgtW_t2taK$5Me;{Tj@bB^Qx z9Pxin96IMs(2;*mKI76I`R9oIb8;A`9r@>o`E&A?Nu__oza07Ji2QTn-)H-G&fv&D zN93O)^3M_Z=ZO4sME*I|$c`X~pX5{{I-WQ`ho9t#^K-=cIpX{raej_CKS!LOQ=G3W zp_j?29(@MSqvlkbPTM_ls#B-!9y!&l({_&>y-!ZH>>S7WIpX{raej_CKSykzBeu^G z+vkYtb8-wH@2Eb9W8|b0pT~}olUkhitZYthU~~+hlMgukJ%?Fl()*lBx0PD*zAcm5ZVe2z#yr}plg(7&p^JDnlz=sibon|Dig(zPNF?uD~H^r4ur5L?> zDo>lr)28yYsXT2ePn*iqrt-9@JZ&mZo66Is^0cYEdiK*no;H=IP337*dD>K-HkGGM zK-HkGGMK- zHkGGMK-HkGGMK-QE;9%m8VVRX;XRHRGv1K zr%mN)Q+e7{o;H=IP337*dD>K-HkGGMK-HkGGMP6bri?pd1X;UxKre35?y-1sSkv4Ubc65>%u#>c!leC(Xw3?HO zR40RzsQRR$P^D4VNuGn8EuU0;<@C#- z{qrPseUj1TN!7J~_2}{>Bej#%=}GuM3G*l6{3L9jgvpaIc@o}ED(aXFP7zC-B8oUg z6mg0u;*{>_vVQfEYhl^Q+XKP7z{JksLgf=PoFZm8#nqnTYEKb4oFZ~~iCTDxdB~SI<|U4KnK9$bj2T~M zB=|BT!B;r`6^?&}<6q(UZ*ly$IR0B4|1FL`t^Cu$Y2^zU+n!Dy6icTyx3EL#XQ`(d z;c7o&^8F^xX}Hp^t>j#Hj?Sqw=$uAB&($h^(pk_ercP7iic)=M>RSDqdIY&I=oM3^ zsr}QMo%R{b=V{F|IBix>Yd*ngb9uJWVrx~}N)(nGxHMgfV%2pZ%PHU{~v}c)4 zGvYpt5?041V~ATK8n|hFZ7L zPkG)@>o)pc-cai{`YF#FYTZUZ<#|J`+qe_-`z&v$bsPPZ?G3eVqwnGk>Ck8|dIJ}F zgDZbSE!{a+KtJVqLoMCtD}O^R-IxLWl;;h#?#bXRt?w+Y@2pzx{lQsk_AIq)nU;kMtQ)$}TS=!oJjk_-^$1U!x^q^ycN6E>OevI_v;1T|7y`7bYeIBo-I4dRl z3|>=lR(f{YPan?G2G4TWXK90Hx%acU@mUx+iyNPXhqJWJv#@cNmUxzXKg)dAS=E=$ z$*k8|)tb{Qgx}}BzE3IN=ltL24BzL!Kfuj?fSdh*8vg+`{zLTqL-hPZ^!!8g{3DM4 z5y$_CL2uGmifm$N!Auf5!2X96!nN`sS!OndJC$%8!C`$`{Hl zM}(eFIHy{3j@!;T)tYlW18@#kImbPo!&T1dY&ueBGj8_rsyiL2x*Hc}!6(Qc1rLFq zr#*-NoKs8pf8AG}Qw{DA`ulXM>J*T>JzIA(!cYDvN22~>boKp=tZ7)41FV&Ga+s|R_=P>qj82dSlO~Kd{j7`DV z6pT&5*c6OS!PpdxO~Kd{j7`DV6pT&5*c6OS!PpdxO~Kd{Z$nS_u{X(oll(Wyf0KOng%8*lK44#Xq2G9&Cf=JS-kTP~ z%FzgDQt0d=(lyIlXin?)x~L{``>BS*-qpC)2b04^E&9!*>uu9 z?=+F*G?C;qk>s?-6#6gm7l0Sp{7}jI~_dZGpKfqo*|#6&zh#snhv~r zYFhQ;Utb~ZUSm2q1O5Q?7;u_iV_K2Cf3?p~D|$D21@AN~?Wb93Kg~+}X;#`#v(kQA z^`&E2sV+n9?w%>=b4i{FJ(I4bM@x~M+N7lL#G|{oR{{Do+msny*Yh}^xLH00pA53 z?VM+>{yejD=cPL5c&`4uly*6oK_N3JWCn%IppY39GJ`^9G+v$zW>Cls3Yke-Au}js z28GO^kQo#*gF0Kp_`U$ORN~0fk&ZAs0}{1r%}tgH(=120l*7l{Ke2HVBUL+2@NE~>Pn!1R)UZlP*;;t8Q*NeF8Me6IK?#1VH9C(p9@FH>GMQY?C9($2E z@FH>GMLhN*?s}0p@FH>GCE~zK#DSNH11}}t)HyG4FPDe|FA)b`A`ZMn9C(R1@Dg$0 zC5`fQJaOP9;=oJ9ftR?8OI-h@z;WOu;-5=g`6c4OOT>YfG~)BGjsq`o<(G&9FA)b` z(kM^)#DQZ0P$6K_5w`c`#p~kmRDTb{YxtR^lvzrd#Rq2bfmwWD79W_!2WIhsS$tp?ADG1lX7Pbpd|(zIm_;G8_`oba zFpCe&;sdkzz$|w(%N@<)1GD(REIu%cqGq|%S?+WeADG1lX7Pbpd|(y^W?^6!ADG1l zW>MEHx|+oYX7Pbpd|(z`&Ef;I_`obaFpCe&;sdkzz$`v6ix14=1GA`Z79W_!2WDY@ z7UpO1fmwWD79W_!2WIhsE7ZspYUBz&a0MT@f)8B52d>})SMY%=_`ntF?h18x1s}MA z4_v_quHXY#@PRA%z!iMp3O;ZJAGm@KT)_vf-~(6ifh+jH6@1_dK5zvexPlK{!3XA0 z$Q%lpLm_i0WDbSQp^!NgGKWIuP{C}bXm%%hNb6f%!O=26Hz3YkYC^C)BC}bXm%%hNb6f%!O z=26Hz3YkYC^C)BB)53ow?X`|Ki1BVn15SI!??%!i z!5c|OdN*{}#@~Sc9?lKoy&HV_4b0iIij9=;IaZszj+s*CQ3_NJYHP z@oeFZU^{8g8QxIz>wM1~-cStewByDbiiDl^mrrgGL*CG{Fqh@;;oMMc?0nBI-cW?> zwC5Oah;5_iYHlbtHhRtH4MoUKd(Gz!sZLx;b-pS`%QvJtU#HiH+>q*wo{hYrDB5TC zoa7C~(oQ=fy`hNOX~(5ER9`|x)cP0E=?%rzPJ6EMhP0=$q&=0T=vx0GYP~_!dP6$& zuOHB_Z`11Erq#c#wmBKRt$H!K#J6diZ__s47N5@XJnh>$v+)DM0;(vWiUO)Apo#*j zD4>dh{9z<0Xq<9cXjK$YMFCY5RPMNPeC7hGD4>c0swkj}0;(vWiUQxmDWHl1swkj} z0;(vWiUO)Apo#*jD4>c0swkj}0;(vWiUK2u0;(vWiUO)Apo#*jD4>c0swkj}0;(vW ziUO)Apo#*jD4>c0swkj}0;(vWiUO)Apo#*jD4>c0swkj}0;(vWiUO)Apo#*jD4>c0 zswkj}0;(vWiUO)Apo#*jD4>c0swkj}0;(vWiUO)Apo(`;#XG3t9aQlSs(1%gyn`y< zK^5If zv{6DEC1y5C(#E8Y^c(9XDP&xDR(?`qRcA?8;`4Y_XNjJ)l>BFo_o~iP(yQ`HNza*= zbhSRxt2#?buh1(=QT~@#b(XXa#Ar7zsV{aZUe#HW(wyTN!cx*Jc1lv6(W^R3tm-VO zkM@yX)mch~YC%qWRcDD+oh8LQ{+CyE zmh}9~==s=EfI`&DdMSucR#H3lk#ijBRh=bf$x3Rc zPW#DqNwJyl#j83?ip`8()mhRi6r)#lmWb0z#AzkkbxG}7XP{k|)UKUg!jWFpS)z@X z)Dm@Htm-T==T=fn_mN)JSyFp<+Oa`Nt#wDrd#{fO^~^}9h$59xTRSb(Ouq1^r2mDq z-qBFbo1j)=D6N$kLcODrN_bVLQ1566Zvyp>hSFM%Cfw*FrB5HJH<5)}vmw-)4WZU- z2(@NIs5Kixt=SOj9Sxz@X$bX>hVUw=cQjH7v0>DE$HJvPQg`aK-q8?#KshPyF2&uY zxVx0!{7R+lNW%T4aiPAXA=H~+!f|r6&QocvA`r@#gz_b!qFkZAq#@MGG@;fC3KjJU z74-@KiR0x?N^9k(P%A%$TKOrI#)Mk=DbyN5;lJ=Nt^8D4Z+;2&=9f^b2ZeGZq1Jy2 zIjy%`c&xN2oWygmNCC-ux13MW|43ehK9~LV1o*Z+;22B2=g^X$bY^mr!qh37_Ve zzX$c^mvRn*`jUpydh<*84RW+bRB5dd70Q2vdh<&t{}JlVFQHbI3*|OKeMv(ow-L&1 zgjzK!)F?oxQGigR0HHdh}9da&CljRxd4=1nU|g?jT#s5ifa zavR~lg4Cl|wJAq4@It-$C6vzyHDVHKrKnJEehK9>Lb*yx&A|Wi+BV_M&bO-w^(75q z=;P%oPHR1cxXBTeP~$A2#ydidtx`8RMiOcyCA53oKNP6}q{a@>F5ei(S zUeD>5L9Mk@T5FYsdXr1|UGlZoPU-KF)+k$Pt6~v)ScDQ5srHpmZ7$LnU%yg!i_{lP zro3G_1Z^pO1$F%e9+c%4Oqka2keEVj#6sPr^ zRH!GULVLJ(jyBrEy>qlt&%aXMIofC^znQDOnXA1SKff72Pg56ZY9UQ6q*V)(skCRG zgqlxCrQtvA*(9ayGijJl!+aX%(=eZg`81rT;XLgbBpt6YzL0b3`kj7FdQLl*5dMT5 zjh&S?+iBQN!*<#;Maub|Q7y~37<6k&b4O|TPx~oYsto?i;J*z1%i!O;Vft6|Uk3kW z@LvZ1W$<4H|7GxB2LEO7Uk3kW@LvZ1W$<4H|7GxB2LEO7Uk3kW@LvZ1-idNDI*Q!SHN$BuX6l9>CB7O zcKoY*x5d=mVznUUXzokr*W8zJ3psz~V^pX9RjU?-TD2&A3bf}h)(oMpMD57=T7e_f z8Y*E9%!Ar3S~>Rf#hNqp@$StRtKN;S_r3eEgt&npVe|6N?e0 zPp2~QpMn1jF-8UsGaA24rZO<;z0908lNpUKl!ng?d}in$z3-TQg`W&;cxN%^m;vu5 zX7pWq2Qj1jpp4>Gqt;If-vxa~8SW*+U9gXsaukaSea+=ub2-;sj%LcyOgWkFMU zrX0X*qXV&YhNXkLBEBIhrXCteJ8&Q;ufJ(M&m- zDTjx0G*b>6^FMUrd<8I&uPt+!)-a5DMvHqXr>&^l;b4jXr>&V%h60ZY?q^%ax_zpX3Eh_IhrYl z|0VFh1pb%6;SxApf@YS$>BLz`zpjeF=BH zg!^5>eJw#VOVG>`G_!;|TEe|7;Vzcw`t|)gG_!1vt>0U0U zeoyxz)D;@F!YWn4Jyvj!6=;R-ZX0nZg^tOB+x&{zeWSD>*9G**GeD$rO3by0!FD$rO38mmBK71T%t8mpjQ zD$rO3wNrt{DyW4DG*&@fRG_g6>T4m!h$yFu4>am%`*yG`18zm%`^# zxLOKJOW|iJY%GO`r7*CRdtb_3FXeuha$if)*itmM6pbzAj+SySOSy}sXlyAOTgo+8 za?O=ob0wOoL^G9WrV`CmqM1rGQ;B9O(M%E(LVWSewRKiImnyExHm1w3CmMYOqC0tdanMxR|L^GA} zR*7aRVXqR+RKj5;nyExHm1w3C%~Zl|C7P*3GnHtj63tY?a3z|lgy%{$QwiIZXr>a) zRHB(mG*gLYD&c<_{4az5WpKC*4ws>sWiYu6CYQnFGBl%o+T|6?;By&VErX?H@Usjy zmchd^7+A)=FXOJ4algyBuVrXv8Jby!W|nbB%ea?i+{H39vkc8Fi$*j; zDde*7sCt=Oq!6Q{$6Gu*D)boY7S*_pQ7s#@;8Pqk0qUIshCm z7S)LHqVvVJF)e(r*fVT>B>2)E1Ob~)-@j&7Gru{yJAe=@ZK#jZfHD^TnT6uSb& zu0XLXQ0xj6y8^|oK(Q-O>!RCu`5vQ3KY8n#jZfHD^TnT6uSb&u0XLXQ0xj6 zy8^|oK(Q-O>!RCvG3!0-p85W$C=;9Ip4>B-%mgLe)`$>(^}t8U4KA#dO7t0 z-KkL5Z*)I(M+t+qvl(^)2L8y1PJxiRrnV^(mRa`TfsK49qa%*!7lLg z;1|F@2fqmZ$9Z~u{!|2N-d^cpmGVLO{~-K-5dJ?1|5fl`1^-p>Uj_eF-sv?}1^-pv z=~Zd-Uj_eF@L!cM|5fl`1^-nE^IzqiUWMkr3jV9S)2q_vzY6}V;J*s~s}knFDq;Ss z66U`uVg9QU=D!O5tKh#1{;RyxtMbi%75rCur&p!Te-->!CCz_T()?G!e-->!!G9I} zSHXW3{8zz$75rDF%zu@4dKH@gs+9S!N}2zvl=-hpng1&9^eQy}RVnjdl`{WT@L%Pf zUX?cgAA|1kW282&#D|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR& z@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm z1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP} zHSk{p|26Pm1OGMfUjzRif&Y)d|3~2eBk*4f|F!U63;(t7Ukm@W@Lvo6weVjH|F!U6 z3;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6 zweVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7 zUkm@W@Lvo6weVjH|F!U63;(t7|55n=DExmE{yz%;b?{#Y|8?+R2mf{OUkCqn@Lvc2 zb?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{O zUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y z|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mc>~|Bu1{$Kd~C@Lv!A_3&R0|Ml=+5C8S> zUl0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0 z|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF z@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml?yarpl@{C^z&KMwy5@ZSLc4e;Lp z{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}-vIv& z@ZSLc4e;Lp{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}-vIv&@ZSLc4e;Lp{|)fp z0RIi}-vIv&@ZSLc4e;Lp{|)fp0RIi}-vIv&@ZSLc4e;Lp|DS;WPr&~t;Qtfw-w6MW z@ZSjkjqu+H|Bdk92>*@n-w6MW@ZSjkjqu+H|Bdk92>*@n-w6MW@ZSjkjqu+H|Bdk9 z2>*@n-w6MW@ZSjkjqu+H|Bdk92>*@n-w6MW@ZSjkjqu+H|Bdk92>*@n-w6MW@ZSjk zjqu+H|Bdk92>*@n-w6MW@ZSjkjqu+H|Bdk92>*@n-w6MW@ZSjkjqv|T`2QsQe-i#b z3I9#--vs|n@ZSXgP4M3Y|4s1U1piI&-vs|n@ZSXgP4M3Y|4s1U1piI&-vs|n@ZSXg zP4M3Y|4s1U1piI&-vs|n@ZSXgP4M3Y|4s1U1piI&-vs|n@ZSXgP4M3Y|4s1U1piI& z-vs|n@ZSXgP4M3Y|4s1U1piI&-vs|n@ZSXgP4M3Y|4s1U1piI&-vs|n@ZSXgpMw8S z!T+b=|5Nba4FApW-wglF@ZSvo&G6q0|IP5<4FApW-wglF@ZSvo&G6q0|IP5<4FApW z-wglF@ZSvo&G6q0|IP5<4FApW-wglF@ZSvo&G6q0|IP5<4FApW-wglF@ZSvo&G6q0 z|IP5<4FApW-wglF@ZSvo&G6q0|IP5<4FApW-wglF@ZSvo&G6q0|IP5<4FApW-wglF z@c(J}|1|u68vZ{G|1I#}0{<=W-va+F@ZSReE%4t0|1I#}0{<=W-va+F@ZSReE%4t0 z|1I#}0{<=W-va+F@ZSReE%4t0|1I#}0{<=W-va+F@ZSReE%4t0|1I#}0{<=W-va+F z@ZSReE%4t0|1I#}0{<=W-va+F@ZSReE%4t0|1I#}0{<=W-va+F@ZSReE%4t0|1I#} z0{<=W-va-if&b6I|7YO;Gw}b}L}TJ_Q@8Q!ZTxy$!XxY35^F(^uWw7N1HY*GqT3Rl zi@PoPIdGM8l6Qcs!6Nydf4hxRZljdjQV%NUbCh*EW!+9$w^P>bly!T;W!+9$wtd*3tlCoA()=J7+Nm(l? zYb9l^q^y;cwUV+{Qr1e!T1irTqLld|rltUD>|PRhEIvhJj;J1Of<%DR)X z?xd_cDeF$kx|6c*q^v)pth*@dF3P%#vhJd+yC~}}%DRiP?xL)_DC;iDx{I>zqO7|p z>n_T=i?Z&bth*@d?u4H&+@0|Ag}W0Ukyh`PkDV6&zBGKde9ZU<YDL2X}x2;7(9)@#xp@kbV{P3ZlE^OFF-N$#|QOkuMo3EBObcDJA)zN&gZ5^3#O7 zc4c36QU>#TwHh_&_6W9#4fIU9H{K}~B z4GM>KcyMS`)6F)`V-PmD*{gc3P>OR%)k}+G(YBT9dAwR%)j;>Dp;cx^`NromOh6mD*{g zc3P>OR%)k}+G(YBT2ro_)|6|fHRalAO}TbjQ?8xXlxwFo<=SaYxprDpuASDDYo|5k z+G$m9qH?L7R%)k}+PR0?xrf@hhuXP^+PR0?xrf@hhuXP^+PR0?xrf@hhuXP^+PR0? zxrf@hhuXP^+PR0?X`^=9sGT-yr;XZaqjuV;oi=KxjoN9WcG{?&HfpDh+G(S9+Nhm2 zYNw6bX`^=9sGT-yr;XZaqjuV;oi=KxjoN9WcG{?&HfpDh+G(S9+Nhm2YNw6bX`^=9 zsGT-yr;XZaqjuV;oi=KxjoN9WcG{?&HfpDh+G(S9+Nhm2YNw6bX`^=9sGT-yr;XZa zhqrckYlpXXcx#8Zc6e)tw|01IhqrckYlpXXcx#8Zc6e)tw|01IhqrckYlpXXcx#8Z zc6e)tw|01IhqrckYlpXXcx#8Zc6e)tw|01IhqrckYlpXXcx#8Zc6e)tw|01Ihqrck zYlpXXcx#8Zc6e)tw|01IhqrckYlpXXcwvcocwvcocwvcocwvco zcwvcocwvcocx8#XcPI&8tw@!HLgttz3>x8#XcPI&8tw@!HLgttz3>x8#Xc zPI&8tw@!HLgttz3>x8#XcPI&8tw@!HLgttz3>x8#XcPI&8tw@!HLgttz3 z>x8#XcPI&8tw@!HLgttz3>x8#Xcw>o~cw>o~cw>o~cw>o~ zcw>o~cw>o~ctm92;OEFGg1!(*HPj+N?b>Y>nL#@C9b2yb(FY{64z1UI!ateiR&nF9VM=# z#C4RojuO{V;(AJ4Pl@X(aXlrjr^NM?xSkT%Q{s9`Tu+JXDRDg|uBXKHl(?P}*Hhwp zN?cEg>nU*qC2pX^4V1Wn5;sud21?vOi5ntG2`@?g%42T1C;mxb@2ctK0t{NP~roW_y8q7 zK#31f;sccU03|*^i4RcX1C;oH>O$wI#0Mzx0ZQCRi5n?#BPDL6#Eq1=krFpj;zml` zNQoOMaU&&eq{NMsxRDY!QsPER+(?NVDRCnuZlc6Zl(>l!H&NmyO58+=n<#M;C2pd` zO_aEa5;sxeCQ95yiJK^K6D4k<#7&gAi4r$c;$}+ROo^K*aWf@uro_#ZxS0|+Q{rYy z+)Rm^DRDC;Zl=V|l(?A^H&fzfO599|JyQ6NRF4#H{BT0gW2AGZKPr{>Ft^sjtXdDV zYCVa&wEC_m@n69|2LA+H!}0%3W3iq@2l%JtcapxBbQkGA)7Y>l(M{SbF?!UdT;gNk zc5nwc0PY06YN&@F)bW+{6TGo&wo7r}RY&B>cVzi-u(EC;=kswe3; zLwlId>`D5~&>m(rdyImEY>u)CZj- z*LC_sq^n7Pm~;*4TJWRf)RF!e>3Y&1C*45$6QmnSf0A?)=}(bvCjDvBEu=p~`Zn-( za3#13Tn*j{a_`La_N3O3w`GVgF)K)#DNb6i%EN}Y=jp@cu~ZW5ndGGMG;;U;YAT%6yZe?UKAzl zMNz`qh!XaqC}A&(@S-STPNIapC`y=D@L5T382rr88q6jaF@S+GWitwT+VK0gj_M!+ciW2ss2rr5f_M#|ZFN*M@C}A&( z68549FNzZOq9|c6iW2ssC}A&(6854fVK0gj_M!+citwTcFN*M@2rr5hllc1WMG;;U z;YAV8I3m0#;z>t@7ezepi14BaFN*M@2rr88q6jaF@S+GWitwTcFNzZOq6jaFcvceO zMG;;U;YAV8O`?RoC`#CiBD^R{+KVE*DB`I~gcn74QG^#ocu|BGMLcJT@S-SbFN*M@ zC}}T>@S-SbFN%`(q9|!EijwxCC}}T>lJ=rV^G>=F%{v+GMUmn+@rD;gcu|BGMR-w! z7e#ncgcn74QG^#ocu|BGMR-vZxE*OFsn3ZQX_t(^UKFM5MG;;U;YAV8o+7*`;t5oQ7ezdWitwTcFN*M@2rr88q6jaFQud+< zFN#w3q6jaFQud+s1>cxwCahP7bs24Bl#fy6JqQBF>{#IkQ z(5PdKi-p5@)Nn$3mniKK+%V@EmQzJadjvO(Qw`%(!#LG&;&U414a=|A3I8ic{xSF` z;2QA1$?b>bSH?djr<3%(q`OG}86`TB9OjwMFwb;`d8RYWGo4}in6FLy*a{y5w}bl1 zka7k@KIY@cxc>d%0q`Jr2z(Yi%#laHuY=zJ zp9A%MA)UwXi4V)ij5+X|;EUi%?(P(*y&H7Q%it?q?RPllG-bU?`Zdz}?vRdrowP@J z!*Vm{c$7CRH*?yfykWVS(;npw%gvnrXYj}1Pr*r0-w)KU`eKz(-wzZzvKp3~Iqgy2 zu-we)^Q31;dz3dUH*@|wzH+&lu?#E+J<1!Fo9P(bY*=pQwBMZ>mYX^4QQolJ%<1L) z>wTbOm|?k@@gvq%@}pn_zczwRU^CbPeirnakYV|o6e52!t_J^zQqZUTO)ACThUITA zeGO%KEyr;3w?=)VM*j`83##xY(4)d(+;3R!r~8%r>A!M6oelRJmisy9KL7gvS9j&% zO%+}L&XTlg(o!g82LpnvEjMk_rhs6YrcfvpDZ7H)rnhMzO==dPfCxp|5m0bJ#j=Qi zh`7Kj$fAgBiij)9D~RIqiLV0UzI|urPHqb>@B6&Z^ZoI)Pv)GNJ9B<#&di)UGk0zR z-Vb>2esC4MALFf@Z_oJ-oWGXyop^X1PwCA0E}ZYm`EH!=&iNjk&)|F}=X-Kq=Ddyb zS)9-2yq)tooOklD7Z3aJ@CF{{^RR%2MXc`N{g}3FRk#$qALH4oa4C2{#p4b)ko(w!pVj=i67Mi8568md|MoNftl9UHj z7n8stNk(4iZBDI%p6g-t$N@2kpB#X32@J6Y*bf4g1?I~>)e4^A81ZpzPfZJ5? z7AX_Sf=>p1yx>!$ZfLOtUv))IpjQ~}5ImAP;x2;6k_8tFo=Ew4wBV_fg;xpQAhm$s z71HDwrA&NI@Cnj-(nRoyQWp}JZ~Lm^*4wYo#$>QGpT`a{9Y zl4><*EmeY%QnkvT9}1LPi=s-v@3m#xPL@QORt6K2_5m$Ox;i6#PI`=;su;c zj@27N7nE^Jy>%IJ2^o<7*Ao5{MC%opBSBgiG}Cmp>N>ZtY8xE>KmDTdzUmORoB=$9ToN|?-e@2T(kSNGa0dm)yj-!H?b0(!-t{E^KF zBZ4S0AR|gZiO7VKkQrG}GD<;>P%3JSnxHh)6s4nPs5xqZTB25{HEM&}qIT#SWJT>! z2L$g7B6wpBbw*uKSJVx4M?Fvm%0xYpjBF?iWg|OsAUIu%oG1_VLcLKRbUo^e`k@<; z3*{p>DnK4oi29=es0a;2gHSOVjE0~RG!)&4hM`h49F0ID(I_+;jX`74P3UGc4vj~* zpb1DpWyp)lk%}si4^<*RnusQ$0IEVk6hhVLRuo1N6h$#K8BIY`Q4N}grlT3?HZ&96 zj%K0Rs20sZcc44bTr>~OM+?wGvqr1^PXa!n{?nU>Z`_Thv6?zao zgdRq#(Ico1twC$iIDq zchI}&Bzh0MkKmWh&7v1t;Sa+z6-Q z#<&Si!%cBIZibuV7PuvDgd3q9$bj~;{mt`55$9TF&>PE z;1WC(--w6dQal`wz$5V}JQ|O|WARNGp84bP_!c|?E4U1MaXD6T1@_@e?8g)FBpkq1 zIEX{I8sCb;ID(@%h9~1Gcq*>J)9`dW1K);c;@j~oJR8^IIrt8IC!UMv;rVz0UWgar z#drz63opgX@N#@Nz6YcHU6RZ#BbrZ@jLL#fhXbD^xlVGr28lS0H4NZ z;CI{3!tZ%~jL*R@9DRyE!=K~-!C&C>_)GjR{1yHhU%(gfCHxJ(jK9U-!8f%3fPch4 z;h*s@_*eWJe5a~J5PWSWfo~8r5F>o+TOu)$B=`<53xV%yf^RfRC5=fFl17@sw|O*U z-!4H~l2)WOX#?;7w}W@kt)xBaK&~YnNhfk0=}fwiuB033PI{0Gl1X|Jnb=4c$tHH< zAUPzLI7uGqMS7Dy~Q8nzY zhDn4(NsLS;Q^-_OL#C1GWCpp7%p|vyS!6b;C3DCf#304dgMhk!&KH$>U@T zd4g;uPm*oqDe^RVhCEBQlO5zA>|&T-DD5hOZJf$$ctn@d5Ih#FO!4h5IIba zkfY=k@+vt-UL(iJ>*NG^gS<)JB5#v-$h+hud5^qLPLY3-56Ee9hI~lQl8?y8m;MT4{UQ zfnG~H(oXa`+L?BtU1>Mko%Wy^G?VtEGPThxnoaH0L33y>b<#ZAi}t2{==HQO?MH8* zE}Bo>w19eOA?;5G&>}jJ4x+_$Fdafm=umni9Y#y(a5{pHq@(C)I);v=H_@BvI69u* zLMKp#mQgP)rz)+WK3YlrbRwNZ1GI_;X^2+STWOd^Xq3k2WIBaTr8RUKola-a+vrSs zJDo*m(^@)*-a+rAbLl)fpDv&a=_0zAE}?hPrF0oxPVc7o&=qtgy_eoc@23yYRrEpn z5Pg`grjO7%x`wW$>*#v=DBVCGqZ{cax|u$nkQod`%hd`Rj0FOz!BCJb3;aP}SdGTQ zK|=)Q)2dOO>J2DWiMPf=QMJ4*kQ9tnm9a&KFK8?e1p-Pqp;`^YY&&XFs(_2YTEfgT zM?g|QHB~ENH5gDUqDh?N3#CMbEiwF&Nwhi;ix^;yP^B0vYpN^Npb=#FL*<4@K#5e+ zX=*q`LP3>8r-TgA%CHLd3&p~;!arFh5&u*}M4hY#4JuoG(V#!5f~-I&Xo|r4igPre zMj{6F)|e7VfO;ta3sq4gY$1b{=+*aiLs6y@i2nO~ySXf^cqge*RxeW-uv}e>Nab}j z!!pS4_xi)$SXB~V%0ys6q#Ar-WwQF;%m++Ny2=nqnG#OoF^-hPk)r-Uxyl-`464am zkvCtG)_momDM88_DUlgI09O;eu`o1@w}#ZHK@c69qy|B3LPX_@yu@-ptN|nbh)G}F znnU683a~3PbFwey4+PYz5Vt^5AmsCVl>qdngjmoo%dUc?`gNo!G#R=DtGlsWg*JdL z0gVoFVi7YmYb3^7JeshNQ_wG{el_G=;G~Uba6e*F0CCa0_s$w zi(A^{id)Fw3WGhd%aiC9Dj7XmVUJeWQ(xHRiI++$;(1tiODf{|7~80*J}-+W7sd0l z81Y0ajYBxRu|$I?(I86diy2Ea{Yv5`6RTo@sJ}W;V=Upl)Hp&bIzlTtqQ0nUM7)e~ z48Ld?UKt7plYDBp3WjxAAYx=qFoBZ)SL>(|Cs9vNor0Elimok?7C;Q7) zV@NYXOe+}E3dZUSnqqp18h#P{4j92y6HiWXRVm(ZD43vV)aZf{$85q$f-B^M?lmbv z(WueQg&4gWkh>np?5*diyF3)7UI>hCuL8o2UX2uJq&yxAhm@$X9N?8`f=B29yE#lB zqes(2()ltOoOgtF4F43k`nwHpH##lwOpJv7ipSn zximhdNUtDEPJ|e9`+j55Ko-aTiROXzI+!Qc^Oivkl(tN|BEno%FaZ7D?==={jTqp> zQrs|Kph3h~teG>w2`y%Z3P4~i);e84BSSQ4K~36_1_CU>1`*>BOWzd&AqG8RGV+~^o zBgBA+Y1BNbz6Rzg4frt)_?mj&G$!sAjAJ#cOyeYJtllM)rs=G4tX8vWoETuH;)@t7 z0wK^ciQh%EvfOiWHo>LcLlP9>G&L8_ubDMZ#(7I=1N&LvW(yN4G5G6sHE7_PxeVM) zCS5hkEM?S;VBiL}G_;c;8VZIY$??kaSduGHU8!)^q`yf!*8&gqlVO!1L#f|arI6uD zEJ0{QhF1EC8$LrLehtc%m&#CL{LaG6{{ELn#Q#2@uED@ zz{}Gz$ZqhlN*c=5KvYQ(vS3CGRb&@oUp%T%Cd@F2R}W_CP(4l2d^Zlp@Kk?7NYt^~ zPr{WUBTUK#Ia`;UtxL|ll$ks8kb&PBs zBU{JF)-kem47-kD*D>rmhF!<7>lpQRvFjLi9mB3;*maB?U8@|uM2=n}M=z11m&nz% z%GGtr)pg0$b;;Ew=jxJkb;-H9+94poH~Y6$8hQxP94LkV>opTr;d@Q zW8~==c{)a(j*+KhdETYQ-i4`zaVtWUsV0_JKfTW;TtE@B6Zi5Ys2=mOISUAK}b8J~+ z2mvR$RE{m%k!8{!#Txi+&&0MRs$h$v+ypBKzNb-X;j3bekC@rEhu|%I=Ocar7Rgb+ z5-9gqR2T~Q{h~S?Dvx=irbrC#AxvWfUvVeE(_gk!PxJ>XU?m@|0Vc}UWdSqXM8ct| ze5)jp-ObsaiHXglIcE{OCp?l62u*|Or^;?Nh552g(5z%HJO~F{d->!dJ`bOm$|oKT zCMD(ueB%aunB5vx3)}UHo7ckjd+H-#fOy0V`#*6$nOj4TakIo@7Pes#k1$QMWLXxJ zYYy=&5ziLXE~rD$96@shbqbm%s7ug%MhiWKg`5@^x&m4@dAY z#zL-1wkA=|)+7SWrj?=4B-UhQY9KU)=dz1jc3H!-J2d_64iV20@f@ul_8hGq_8hK- zY|r6#1j_9Ql-Ca^w}1c0<8iw{I=72#&lUK&0zX&a=L-B> zfuAeza|M2`z|R%*s_ z;N=NCm#C*p)YB#KT>{@F@LdAmCGcGW-zD%}0^cR@T>{@F@LdAmCGcGWKVRVI3;cY6 zpD*z91%AH3&lmXl0zY5i=L`INfuAq%#dx&m3;cY6pI>O^c6G~a3aZ)IEp%`T9o#|( zx6r{YbZ`qD+(HMp(7`Qqa0?yWLI=07fm`U{_6Y34dh7yW2jMsD!f)6MgboElhXSF4 z=1*jMfzY8q=ujYZC=fan2ptN94h2Go0%3;&(GDJg?-4fe2pf0=zDMAD1inYuz$5TI z0^cL>Jp$h&@I3hG{=_IKE{`a5h|{T()rZ}Vv56ezzAlwSuLzs~i8IM)v-*AFPy z4=C3UDAx}t*AFPy4=C3UD7Oz#t{+gYpUtCbK#_}VyyxWL!ODZ~Z7HclZf z@U?LYae=RmQ-}+EZJa_};JdkfY#wcl0u}Yw#wf%^{k1U)aZ!JFE*onQcgDvW@OdK5 z)gVpip^a6@BlK_!JGg}&+Bmg&v~dbl=%I~MhzmWmaSCyvhc-?jF4{pGrw|wIpp8?A zi+0e)DZ~Z7Hco9GZJYuX?VycQh>Ld6#wo-_J80t+;-Ve2aSCzK4%#?{xTwE2P9ZMp zuZ>fPi~4Kh)aKE~DNs>gZCpZJ)K?pq5Eu2;#$}c)?hDy+VOst66<>tFWU;J48eev> zv?lfW*gWQ{YOzwF)p&XBqFyvLKDTAp*&?BFJfRGpK0?|E_th!I z?nIc#XI8@_(*!oB%?w41ECC2S_yUs1XZOG)uvsprFu`TlVQ$N=^Jy((_>7iiV3S#( zxT1pHjCi{xHg@ZQdt{9ebm;OP?UN=9B8T<8jeI6WcN48$y(E78b;pk7B_qJK_sj*};2; zY}ZCI(D=v}J;d#j;Pfz-65-pg;5V`PNn#5e7;6R}%wl8{gcM@Hi!e#DOF0q>DA6F4 zOO^28l47gWY*@))tJDV0oc+!+HVpN0L3Hj9<+|{4`MiV)P6a1QX2_o+HI|yfx#(6r zJqa{0!U<~&XwgV&BBe_$q}Jk!K}vvkPm)2~R4EPgZV5WH4fuVEw2g;5c(^+NokrTv z!^1p$EfDesq_=qZeu!QDkcXf1@B-^((hofRjfIFtSaT-vun7-aMIy2db>Lw)9%ez9 zg?jPu1|Akdn2m~gIE;s*qfFX(9#-%$$nC?)V{AAudG=F`SP#a@h@O5?H^TbRC?5%#r#^g>Zs#q@LJ}FEtQr@%cU=*FQu=f3(_U&GMp;(!TG>7Xf2$;Itizd`a^C6XMQ&E+O?9B z{_K5vn_d81lrT{hByhw=z?;-w)^Q^?Z{dV34# zy{({Uw}C4NkQZ|VC;>U31e6mcfcv`=DH3I;n2;5Ef!QMb< z3P>HKF7WLe1Wuinz;|&lS`2Sh}pNk*`TwJ7M#v~`!evI``wL;QkuxW7uZmPX;U4m|OJ_X)z2;jnzf z>UPQPnkUP-a*hq=x$JLj^JKWa|zjrMEn~WD?rz0d+nql3weM_rf6@Nc6Z)L}Xm7K1-l_hk z)1Sz|1Uk{W*$3p=FUodfBJ>A?Aps%UMZQk%7>~6BpO3vxRaZ%m<2tWT30+Zuscc^5DaFLl}A<&-PC5~)St?p_{rxZ|ud z=aM__Ki%r7HF(X2+6>E_^x3&dwJANejcu-MKWX@F{;7-0mp?PI)eRfY-@VtFw=I?v z?R9_2x!he3EI7I{zwNf2hw7G$`tYZ>%W1x22s)9yw)x?~n>!!6barkrb`G91_24h1 zAD;ivIPZh?_pTmqx&Na__wK8`^Q8%A&pgrP<-BO4zQp>9~8qn+3DZuQ`4MKil;9@I%ek&AR!=n!e-0x6N<9x`%u1(bCs$ zyZ*awy`C#sAw61^G-uq8<4Z5McxF_i>X&~0_KB5sDa}tGXf|uYkw)EvbLqwNm#20< zVR-o~`%U9_7G+(^hS7HbJ{e;4_21WW<(VbJ3fM%Zgd-1T3Qzm?QLz|g9lTY_M^z4~=dv2LF(UwUbn4Pw9uNlYabS^!|c2wgoj0bia3B?H2S-o8n{J z7LE>{N$k3A{Nbbbq``%|?p84%@%jygF z{nq`>-oskAc6R>0-$1#R{sJFWjAM1!b!VT>Y;kr>qpo*u>G0XjS7|KY(qI_>-CZ(#9Cc3c4Q15uJAi*p6tkihkNm%$)fN~ zT)U&r-tix5Ae?|Xty%poH5`jXtwU5;N`@!dddqp5idncb15F zHLu|Oab*15yYIdkJ^i7}X#2sW=VraOw{ukSbsjwNlP_m0qifcE*gUmK zdgpCt2itG&-rriV^K?bWiiO8Yc3tzb^YHLxXT#sMtcXqASyXx4S(Ch3-gv6VgaNDH z-P{yyn)9x6xty1FFX=VohT%J&_^@Z|Ise?)cvxTj%)8xxZNKBOo7XimZ`zPLG{v4d z__5cHjPLZ;;@#f_XLQ|-#{FWOH}>ttclt)pZ&|m`ap8;Z>)L;|?7KOiZ2Z@RspF?l znDgr>^Eg+scld;N-0i>ChJP(O1(tf3-v+K8%GGR$S*c(4$*R#jVeSAl_XiJ3Xinsj za+mns9iwJ#{<8hN)e*Uyo)gRMTK#oiXzMHI2{6d3;$@MAD)KFB#?{>$i7a@VAnj?bF-)_@j0rnk(LJ2ksj%wFIeaOleE z%j5`8W0Kfi3>;50xoI31W-DSUMaX~YByCLSH58^%GEAfDI?UzW9eVp89AdRs$>t7_ zO^9K7)IqkcZzs30wUS#v0`&dHyvt|1bqD9rR8E0c3Yy;c`lOB5RUcl{Z^bo<83!B> zu3yvc(pBDs`M*Wvg%4JobgfnV+tN2qJtQAo)@Nq^_Z@efn-ggc=lD|}TJzCQvwNO@ z;b_5U;SY!I7?En76TJ8CbE|Hg_-wB2pO0poUo0JJTk_f9tX+5hFl6sfz7gt$iF>CV zEqAs`O`YnQZ2M;JG}36o{%6KL{N198$+fM=oSpN@o}x#cBR@IqnvycQkz8v?gL%x) z!v9r#e8E?9G`(5X(9+QSmaXPorLp|~*8RXr1)NrHR$jedg>we7Q}?T{U+Gs_r-MdL zOiLaN{u^E<2HzNsM&fg^gf!!*P#L`QV1pjPGA1=m9}EZH*vrXQ*yQpt=f~GmedRvv zx;f3kUjkPG)}jJy+*f8;2eT7pkx)g{S_;7wc=f?L5?=6z*Ti8aXPum7Yr$vn)ZDbu za3&jG+16eSkHnG5Um*YO@@Pdt-AezA5y`KgYPKZHv9LJ%@$uF*#qV~T=Y046M{l^$ zvdG+_U1`aF_lBd3HjVr`IKa5kke=7h+q+|vWjpUbel*c>TlnMtqkgS-d2uPyYP^e0P1_DbuC3m!^MxEcW8}>d^8I5AV5c_Y=T>HGbF<^?o`^RamL}}>lJSS3 z>n?T2FY*!0rC2p7SGrE{196w~x2}`9!#|k_5jhqw4vRbHn*X!KUB7rK8UJaG6u)w% zTfCx1YFNI8+2vXay<^s&yPC#ElXi>92gP8SM^m9A)$dERrhJYl!8GxzG0vBFLq6>= z?~Kot-u$CCzM7fx+WrUL@$R{>{hm)IhRe==`$iwvWAknv`*EQ5 zamNgG(69GbZBJiO^w9k3)V$mJ|Dc)Vd23kIfECD zHJ2J}Z+7qUlC@=(pu4MVn?_rKaP!TjQi+V4^? z?pn6v!Br=3?vr-$3v6uBd2pWvq3nfk&OQAk6gd9&o$rs_uxdlU zSBl$LF1s{g*V)gFd)#QycUMi;e9w zwA6QvOvGksaG8RitM5K$TMBGY)W_51YwHVA8{Gds_-tN}{gtaDua8-};*9v1sf}si@H*I#X?u2TVamW~P98k<@|KHzU%dGF(2~wS^}J`to3mZ3#=iCBz2#@h zPV}PRIuADg;pBtWnagjuutljlyZL~5;7gg(6kBL|`oZldw#<64e8G!f&D@kS_~mQA Y{`ig_ZzgBVoR)Ot$eAuf=Sb530&Bk7yZ`_I literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/add.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/add.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad0c7da05995a029ee7ed17da246b6b5dc53259 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@KN#5=*4F5rJ!QSPQfg+p*9+AZi z4BSE>%y{W;-5;PJdx@v7EBga38Ge1Xsxz|>0)>=3T^vI+&L<}v;Qi-p$d-_#z|2$R m+v72B*;-$o#g2ZA3=GmASowK3?q~(7X7F_Nb6Mw<&;$UYBq$#M literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/add_28.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/add_28.png new file mode 100644 index 0000000000000000000000000000000000000000..9b240ad7784bc434c3987dad5046e6295b70a4e4 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zoCO|{#S9FLD?pg>p5rA~px`7= z7sn8f&SVKziw0wn%d8(5KIUsYQw%j0mJ};uG~^a3zIfQF>%fZE5cb7lL9!bbeEius zqq#v&P-UBjfU!`(fA)_1Ns~V?J=*W^XFl5wp)}6B%_6oI9lV#c1Ge!A>{nbMmp(y= z`-p^qqpI7gXBTTcN)56UuO4iezVt|gzQZ5pPG2E~-_ literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/archive.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/archive.svg new file mode 100644 index 0000000..394dad2 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/archive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/arrows-rotate.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/arrows-rotate.svg new file mode 100644 index 0000000..e0cb3f2 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/arrows-rotate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/asset.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/asset.svg new file mode 100644 index 0000000..a627fd5 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/asset.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/assets.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/assets.svg new file mode 100644 index 0000000..208f688 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/assets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/bars.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/bars.svg new file mode 100644 index 0000000..b8b779b --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/bars.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/blank.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..d6fa80c734bd78bc31637c94b1fc1f8197a3540a GIT binary patch literal 570 zcmV-A0>%A_P)EX>4Tx04R}tkv&MmKpe$i(~2S$L5oOn$WWauh>AE$6^me@v=v%)FuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|>f)s6A|?JWDYS_3;J6>}?mh0_0Yam~R5LIEsG4P@ z;xRFsTNS%sAs~zZhA<#8Q%|H9Gw>W=_we!cF3PjK&;2?2l)T9RpGZ8%bi*RvAfDN@ zbk6(4Ay$$U;&bA0gDyz?$aUG}H_ki6e@tQNECM zS>e3JS*_Gq>z@3D!MwJT<~q$0#Ib|~k`N)IhB7L!5T#Wk#YBqsV;=sn<4=-HCRZ7Z z91EyIh2;3b|KNAGW?^d5O$x?7zMg_fo9#dzmILZc>?&Kfh(=;uQq_$Ptxmc zEpi0(Zvz+CZB5<-E_Z<8CtWfmNAlAY3I*W(jJ_!c4Bi60Yi@6?eVjf38R}~J1~@nb z#)_1^?(y!P&ffk#)9UXBMb&bZJZB6H00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNliru=K>l87!7$+DLDWD02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{000t6L_t(I%VS^|1*2dTi~i_@% literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/book.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/book.svg new file mode 100644 index 0000000..22e9c39 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/book.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_closed_black.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_closed_black.png new file mode 100644 index 0000000000000000000000000000000000000000..db2623f123dda53cf9c3911c90de7d311a306cf9 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^d_XM3!3HF=W8NDADYhhUcNd2LAh=-f^2tCE&H|6f zVg?3AWe{d8axA|G6l5>)^mS!_$jZtkY-}5~V>(diw5N+>h{fr<6AifzIS9D^_t;=! zE)Z0~x^aWy$|JiumfbL!X144`!}psvI?U!d2&@;_GWo@JPX$gzwWW0tZH+%a+igCO z@0DpBdMhF~t$J#miW2wI-n%C?loT?%PuO%ME$0q&abbvHQ1hDov1N3V zyw%EOi|;f&&t|~As3JmU%`t&Vl`$zx!&H?|{&6^QhUtOhCy8J8_D+nj5b(J7EA0KA z$X%Jr8wK97J`nkJZ)@n4o*4`s+qKOze;r@-(dm=Gueh%N7ugFeY;1lp88`vG#o+1c K=d#Wzp$P!k*?Hms literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_closed_white.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_closed_white.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e30407ecd5f3272881208057f1d928c7e72118 GIT binary patch literal 7491 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 Qfu3XVboFyt=akR{0KLzA<^TWy literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_open_white.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/branch_open_white.png new file mode 100644 index 0000000000000000000000000000000000000000..efb5ce3c0ce70d362116fc523ac60f1014795559 GIT binary patch literal 705 zcmV;y0zUnTP)EX>4Tx04R}tkv&MmKpe$iQ>8^J3U&|?%ut;yh+jBL6^me@v=v%)FuC+YXws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;i>s5Oi`@MG(CRVF*(aGxbDzAp_6xbq^n3@1i`*``n+STgjUY@QK8;OgAjzb>itw zOXs{#9A+g+AwDM_HRyuGk6f2se&bwpSm2pqBa@mV4ik&THkR9%l?;`5k~pHM8s!UF zmle)ioYiubHSft^7|LtQX|B^8L>!AqAPEsNs@Omo7NWFjq?kz2e$2x^;P{i|lF79J zMvi$@ph9x|;D7MDTeC1R?k0s|K{7y9R~vd000SaNLh0L z00AQa00AQbazS_A00007bV*G`2jd773mGgHf?}Tl006y7L_t(2&)t$eP6II%gumIw zlB?&IA~)i^R7glj2}L+T6mbDyO}koW(m0U`4JE?TG=AUc{lfo$0+{FdUeX<4+W?jX z;4X&Pp_KAG_0I?39cYr8q-MJTSJ`foK7bv-1W-y@fk$8&pl?P=i|wb*a>+pj(4H?`Ky-?^MKr3PfS{@7wN00000NkvXXu0mjfBr-EZ literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/camera-alt.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/camera-alt.svg new file mode 100644 index 0000000..d4772d3 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/camera-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/camera.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/camera.svg new file mode 100644 index 0000000..dc9f608 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/camera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cancel.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..36116eda0b9e56e979d18bfb83b0f4b8e7e68fa0 GIT binary patch literal 963 zcmV;!13dhRP)D0%lrqq`B~L?-(HYd^qDODKg>dJ#xrU!atdZYkU6D6X-V4N9T(dKc;2 zT}+|3LOLWhxRyzD)5H`nl>e^1DCeJZ{^tcb&+l4z9yqT#Vn|F(OiWD7EM@9E<_#VC z9COMk$Mos&nsw@wnIV#7xxpG;M6oRzTqi?BNKocEpOG;);u%*+5Gr|U^bil*<}Nux zA;YiyhZt<1`=kk&DjyNU?NA{w7I=l&k0$d3z>f?OpLR$UUrF%?;`7!>`gfChhXk-T z1?*vo9um;He1kFH@edN!VLNs}I0MRl*)w#-gUvKa<>cp|4N4gC4%3r`2~(aM0H#d?10E zvO;48K$qa453qtbu7sNBs@IOZED@r8tzxxVlo1+xfZoS@WKY+8Q_wM($m7cS#S-Q9!P7ZWV?g?l*i z7%@!9nd%D-9C?G7CRpkVFL9)Ucu2_ksxNHfNFT9JFwz%xapV}WPcYIKMmTbc*e4k2 z3n%A3;2a!65kHB;zl`SnzKp)M*EdXffg|gt`jg~M6CUD7-BiC#+ccquBV|*4ckj-g zewmmt*0)WVM!}Y`zFoq5R5Z->RWF{3JwU~EdwrvXtEk8@ve!3A7?MKCGgJMuf8{>m z32LrrE@%pUeL_k9bFzj6+lv3~xv0?BC0tT`YU(lpdhQ~c1P6V^;iuFWZZj4+_Vo#_ zKQZa``(zlC`-m#R>qowUt7jkuX?7y>nYBj>7gUgl>?SU0MneBjTrfOP~s^^W2+B&!VgRk5z<^^mA_Q#9UgF%6p^IBW$w}7C7bLr;)D}M?6S!V l9#W&kG-kxa#KgqJ{15U!$utaUbZ7to002ovPDHLkV1lsW!mR)R literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/caret-down.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/caret-down.svg new file mode 100644 index 0000000..b3ee2ea --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/caret-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/caret-right.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/caret-right.svg new file mode 100644 index 0000000..bcd4cd1 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/caret-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/character.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/character.svg new file mode 100644 index 0000000..631f168 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/character.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/check_box_checked_black.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/check_box_checked_black.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b52d9ffe1cd6b88d208711edb36984f6ee1f5f GIT binary patch literal 1116 zcmV-i1f%1PqS95j+3@1L;Xb zK~#9!?V3+$9z__&e+i{Z2~s47Af>0G_EbaEV)`OVrS&3+u?9+OtJYVL;GwqEGF}25 z4~ibd3QnmQD=LbApol~SwH*qfgvL{E7C|J3P>P61klbN^Xx)WQc_Y-=-;wqvaG2Z4`oamY8o5uu zbkBpa&Tj@T1KT=0WeIo>IAK)&?MX1!`F`L#;PC>dUj_CXmAPIt-^qed0JZ}&*7?^0 z;NIvM>--bIw~-#^FTf$A@_Va0#yY<&1NKEM>4BrIp02I)j{(yWAKpALY*gl33&uLX1-P=7LFUjR@UT&t zY3(M`I=?YY%YzZizMKb2Q$5B3BN6MJF)C+ki5;x-1J?Ni5$e1I9Eu2K2AHU2cO913 zUjSodDcXclSu9XzCvXASScln`(J_+&3c!oNv~_+kCzK)J>xfVmfhUVX=^Bi6ejIpx z#m|obv)1|hI;^n)_!77);t+Zzuh~WeW1SxftJ2l96}V`fAM2ph%6PI{O&OIBx-HUI z5Xul)ShQu0LzjS4z~pM_eFyPmUR?&Hh{tseCag0q06TM>_7z#g`1i6poyL=S%yz`6 z{28NIk)h;rLLr#*MeF?50A+Jn#KnTL2<(dmC3nYI=Z^w!cX7Q1U>rD3@g#0FO&FEa zF;|&=IiTzTzHi`adCI69j$O3BLnwELDYa=(W&tgua9;;d^1iO9N(;b_n7)#?V>SUd z8V2RR*k+p>Ot|GW`$-uUKNzW9kZf)#(oD4Zkx4I5I zWmNvD157C|+^q9^flq-u3zk>{_8OHR>sl<8vMCJTyxkAX6)bV0PAH{y%(Bk8oh;Zo z*mSe46wER}6J!C`T3d-P-NIvP1>hn z5$MQRPo@dm-9GL!o&bCPsV84q4%?$eN||o*0qVeT6ZK>qXNr_EYI&%0I&7naQVxj7 zLlNn8Y=U?sB12IWeQ&uKpvy??`mIiB;l?%4_2H$Y6ZH1J1v${2YP&H+A6@67D@R54Et6^j+;q3 zPo{nCX%7M~a*}e>_Y%9)e8psw$3S}s4S&UaW?^Hd`T*>ckO0QagJoqM7?BVGdQAtD zg&7GMpbeNWRoJE!bT;8A@id6AO(|!{^s;e$1olfAF{ca5F=0C@WyVw(vzx@67v+zj w3E&&Bpf(!i9NK)|q$rA_D2k#eisAsj050;T2F{Amn*aa+07*qoM6N<$f?owZUjP6A literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/check_box_unchecked_black.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/check_box_unchecked_black.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a0cf290b48c6e361e7f33c7fabef87d4bd9a4d GIT binary patch literal 848 zcmV-W1F!svP)1T3}DG4ucc0^LbO zK~#9!?VDY8qCgOZFYQk>5jDo;upTzSGn-&NEGI`zWM(v)I1f`fr^h2g(?!#ox{m=1 z&$ari9}OT9i9{liNF)-8L_nJ5y)?@Mu6V(XnxFu@(EHycarE(1jaUG9(Ed~aD3Ulj z{TL(CEDr%pE?hcLb{y~Ch&0O|04%QDasseT;^^1i8j)ssAHcHad)`xaeBG51R2`N8 z`UWri0`Qi^(e9p%m;)F$eEDwx?^PfTZoq^m08`5_pH*cx@Z5wU^$T2jF9WIaxpM^Y z%pCSmc0qY+LO>=c=4|-5DI);P01O!8{i*6Ll!w{yXi*``j>B8kP0BM91`HMAyq8$l znL(6CCMePtar9Z|MxQd`89{zBt%(}{A{1sqw7NV9yRl{f`pK{LV4z|qTTIMzNI+J?xtbsh^GO&GE8a9?raf}@EMTY9ihT64kC2$ov8>w93rmYWNvRU@Dt zV$`7tyCja*Z9bqj2x-s?JA&hD8(e5)gw`I<9YXX(CLG&-ka20$%Id&@5i6UCvQ;BA zZp^^Dc0X5<#L?E(`Lk-4Xc-f>&~)vSI9j;`k=0qJ1?h^WKu$QW;aDu6q_(TD-9$Ts zV=G2z+z4T}kzUvRg^RaFXoidlq^7Z*!m)KD$czEZzPWM^M^;!~f#?CiEB^hu%}Y2s z$%wP;DEonEr*L#`1er0S);#b9j-41$GSYVn$Igs68|j0t;pl}p|Ib1s5{X12kw_%+ aOMd~$MH06hlcUi90000kCJ;4%@tH4w z1@PQvq;vrg?g7ja!+f=sSt=aDjr0pzdTugOS90eF;6XX;XVV2&C_%}TZ*qOXt}OUj4` z00U)n+=t%m3dx2UfSa7=s0M;{N6n0wi@QI{czo_eIq$<9RX{NF z)GKigz(Qt%i!sM!5c26)Coaw8sD%Dvb>vvxrfrNlCV`Mt{;B`}cT`+UoC^Q%98>j9 zM7xv#u7gw_0a!|N)Ra+EMF9ohWAM@NHbkYZ^Hj_+#v>L5?kiZ! z9AiLi<-sLst!0j#L==wp?rO_*^qYNNcnoW}`2+ud>&|SM9Yez)eT<0&TS(0T;)j`v>C!$qO zBT72!vLIc_6sT#AYh;$nC+Y1fQa91r%&`*?o^Mo0+eoiNzu{6W2oK0uj5IcOR&(qe zguoaf?k`u_%`poI&o^qcZ?>{@j=h2KfHZwUv{!S?4nknuNp?^v=GY5}hLOHkbLb+a(^Kdf%=!>2&tSli9_Su4W99TiXQ3sr>*Eb7(F+ZEm{E^$=wc}i zLeiU{M+F=5H}9aH*mcbfl05@WG})B-+<+Fxu6IL_TnltNpds@agjU7&U;%W;pa+pm znPV7Q8{3QDSl3eSM>b`SQD~)aomz@823&_u7IZFOwnGnX>@ml>fi^|1`qazo&DXmA zJOZ`*oTo|5Lfv>=8-q74J^WS)ZD7Ska}CM9xzzHp6M&McoAxo<4jm@mxosgXN>t})-4oGx03S^wZ5@Uu1F)6^hp%P=B2x3y8pHo<3%yU6Z3Owc% zW*dV6EW_ayH!d<`$omZ^Ksr&?Cya~5U2cGA&KHktdbNHJrMFhRkZEWGTFggIkf_Dr zBHwVhCW(!}9j+;a&nf}E&lW4>Leko_@8g6288 zq1Q#6&jT{$6!IC0oX4M_TeaKf@6>EW73zxZK|`$Dc6JH+5zrLcn7A%>-E)CNJE50N zHe|}WjnL_CWvz#Gt>-i}Qm`S^8vATnT1g{n2GQ1e+V1M}FF^)f31LXAzfbl<2aH?p zrB8}Ab&Aq!KxW(?zX9X^J_$D6k=p-Cq#5H@BdRbW_pH96D2k#eilQhIegT|h@|iSc RM^gX*002ovPDHLkV1iEeqnrQ$ literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/circle.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/circle.svg new file mode 100644 index 0000000..c2db0b2 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cloud.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cloud.svg new file mode 100644 index 0000000..38d2dc5 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cog.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/cog.png new file mode 100644 index 0000000000000000000000000000000000000000..476d5c9780b6904004c7da0d86c1f02e4c37f892 GIT binary patch literal 1073 zcmV-11kU@3P)?ENDOXxEq##k{R3pG`V_=<^3NWfR4)j)KkE?kf% zU}CHb1trze6>4h;sTD;rtpyq(711_6TOXmFPeL**CLQm0&Kbrt$^HG8P44Zq_ne-d zIYT6GB9TZWvWW>Kq@TD8Z%rbKCJFFT3Q=|)UTQ^@t;I_ZBg!7bOS=$dFXN?m5M}%E z(wB&`ukq3!h_Yz{ypu!>x)$#=AqKVLoh^t#k5E8sIL>$MVhOq3&gY0hM`8YgceIr|YY&iqQ@`QK~6 zQos?!gFYj`%4WoqwqT*0?-5V>feMW6L_F#x3@zbr#H0S91|$0r&w3vNHzOXl4y8E9 z5Dz;}9F@lr$I={PD~(h#??P2Hv5k*OBaS_R%D0F^Gwfz5bE%<=S;V1HRE7}izM+=? zvXWuMx}&JnaTc-a1LhN^j9$d5v#dlZNx#*%UxG%$>Lq+a5(6c?YW(obN2{C>#Hd#& z!B{)f219oRCRP~?=PB;R(sE89s&->)k9y|05eEzCQO)~HF|~}eY5{Q-jsl(y{dFJ0 zLg+*>%Tom8#bC&-wqj#@$W=cjZ_b3=su3H_Ay*wEUqWZ2%FD7H{2O^AAiF$gQgUe1!CaxCt9AAy+*GP?%|S8#ZFe%*GOO> z#bLy_Ugb>^^dZI#kVL7TbBI;FloO_cKI?z#>rnXuv2KJ_AwQf^#JVG>3?mNBvWI0k zCeFQ%8(UwY@+jh1ntry^Op?+IC23&?1EdS}PEAbz5c&FESu5gU4Th($JgXZci}?%j zAcuGCUqC#n17l^3BOc^%YUO^!lkUMvz+uFL`muJC2Zudosl~w?NY31kB51DEg_A{d zo(4V7yWC2^CMFTbCfGp0ZS3d#oLeiEIC_%o8Q~cgkx|9lh(m9&kc<=^oYC)hXq9s6 z($m<(9mL4iY&qBmXe3*lJNfX^nst-}xU1(FC+XyRa$C!w;mW?1+!pg9Cm5oZ0(uZJ z=)Phh(s literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/columns-3.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/columns-3.svg new file mode 100644 index 0000000..8357340 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/columns-3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/critical.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/critical.png new file mode 100644 index 0000000000000000000000000000000000000000..6dafd36f0bd76e86102fca401b8bf5e0423b4263 GIT binary patch literal 1215 zcmV;w1VHHq))aY;l$RCt`_n@fmPM-+ztI}F1RCgNjeG%MdP2IC-ENQCUfg*!zM zUHF!)bQ47+xC$XES!5e@l1LIFh@hB7a3?4(6dkqE#0Q9r5XXp$i%~Eq|C#DLTzk5^ zYP9Oi9r}a6Z`-%*I_FGP-Ky$384@ERJ-mEI^-+tch15q>2h~$8HblLq{-*9ye^C|c zLY8Gim~7DL71Uwsro2Cc)$dw?GD8Eqs4u9Bq@z-;qYGt$#!RISQvZq_T9?*26%z>! z*g_4-#G!R>fiSvieoS-^F ze9J3>hX;Tr`lm;;QoLAK50r7N)cF&g_rZyuEC#mBB?MK8)l3XwMsXR;dx`(TY~Wj;8&)I!0JIuY9VN z^}`Nd^G^K;tfgNA&<8twkHXZGpjwt{0Or9CpM%!F_$<%>^ui9GgVw+F^lAXC9y^N9 zK}%bdP7Ode?3m%XZ)uCtZTZMid|kkL5FB~tK7k!&8w8(d0ES_QuZdd^g2Nhs$FRdU z$jyK)k2L@fV2AH7Y~2MOXaFj(qilmmBA;NBO8|in3%fcNt z|E2n-xE45$*5Uj7O|b>&Gx{OYZ%aLbJ9}^y?vS(&e9Pf}teA`RJf&u{1-u+{he0?b zX*o;PoeS{uPU@7T=TNcUti}kPs{V;IyF?oKxs3daMg_#3NYhq03u(}G&tlr}EdSuG z{ebF?14zS}X3i_sBW(jn$AO~rO1%w{pQww7&y~P(*N}#bbpD6h561+6h5qAZEA;|# z8ID|TJg6^Q>)oikCB`7!<7Fq}vM{jR9K>g5)u-{nLFs73(RVPg&hrwNqj*=uoe+_!W0j{9Gi1-cVnO%Ooq-F-6=Q3$@*MQhZ!UD<@3U1fn%lW@>`ax=B+x;<`j@rp*-*mpG{-xOL*> zmom|blSRa(&hD4=sk2%~c~WQVAuf6PTZxlAt>2+D(j>{#*6H)Q=csD}-5G9_K7XIO d1C#W5;D3`DAkC)WZ8TuhE4F5Jq@%z}V466JlGC z8+TD*$K&q#*%y^x9dq5%VfI+5!ex5lLXP?IKgCb);1Jr_o*Sc)lx@?`DSNPAQ&ws6 d$q=R*2A2s=d9!M-Zvgs?!PC{xWt~$(698)cZKVJJ literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/database.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/database.svg new file mode 100644 index 0000000..a6e4982 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/delete.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..c75e834e9077b16e4367cb41aae1aa6690e4a4a1 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xawj^(N7l!{JxM1({$v_d#0*}aI z1_o{+5N5n|x9$&6kiEpy*OmPN6T5)0(B|)+fj}X3PZ!4!jq}MV2Uz|~ZeVsR;nQoa rU=(KF%cv|^cX(BM&hox2896CNYY}E~ui{jDpcV#CS3j3^P67X+1T}6gSdhR*QBPm3^ljPCVb&qgp-%xkFS$!$1XFu|tWaBkz~lRGx@oSDz-oHQFmVJJjVHMx^ eEB>4RSH?SrS^x4)r>_9|l)=;0&t;ucLK6TZ{fk%t literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/drop_arrow_white.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/drop_arrow_white.png new file mode 100644 index 0000000000000000000000000000000000000000..527c7868f68506cb88f46ed2056c10176c3987af GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|TQn2s0Krmfr&kvX^-Jy0SmuWam_{PUMt*3=}%+>Eak-ar*6K!z^Y)5tsWp$^oid zHER~nxgM$@upwAQ-QbwG$0o1cYiu%IZdiO{d#tsA`LajV=cW3bV!FGctYlyO{ug&i zHsLnIG?oWxYQ?+fe7-#8{W+0H=6r{#A*!LbMSpC2tMyX$#=JxOnTpRTe_-Gd{^7o0 z$-!^Q(Wm3BRhEV{_%`?JzPJ(7_@eElp>r{x1v z&6W#-FPu5n7oW*V=qcQ?H}kJdLvByuo}al>gTj_hx%%n!zm@wKnoUx+Rh`#u0D6qU M)78&qol`;+0M>+puK)l5 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/environment.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/environment.svg new file mode 100644 index 0000000..2b7eda4 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/environment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/error.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/error.png new file mode 100644 index 0000000000000000000000000000000000000000..2606a0ac76bc57387b19b0e7d63b923eba144693 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%6^}NkxPlOD(Ln+ppa~4NJNQqer|4RUI~!Pz~Eeznpl#W zqEMb$lA+-4=^K!um&y(lH}-UK46!(!Y;*p=hxv_82aY(fI*2+)eDIX| \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/eye-slash.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/eye-slash.svg new file mode 100644 index 0000000..5ccdbf7 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/eye-slash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/eye.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/eye.svg new file mode 100644 index 0000000..e5e88aa --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/face.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/face.svg new file mode 100644 index 0000000..dc8784a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/face.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/favorite.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/favorite.svg new file mode 100644 index 0000000..d9fa587 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/favorite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/file-alt.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/file-alt.svg new file mode 100644 index 0000000..e1f980c --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/file-alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/file.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/file.svg new file mode 100644 index 0000000..7f495dc --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/filter.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/filter.svg new file mode 100644 index 0000000..c745e65 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder.svg new file mode 100644 index 0000000..c960768 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_collapsed.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_collapsed.png new file mode 100644 index 0000000000000000000000000000000000000000..fb701e07b0a445b68c8fe1af7875754d2c892a0f GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;M!Q z+`=Ht$S`Y;1W=H@#M9T6{Q(CLpEk!OW?7JNo}Mm_ArXh)USBB6puod?amvxe&kqba zIvUEaGw#dqRb7<6%I4wOFD41SCIucpi~?U5&9$68ZJ#VqD;PAyH{4+kQmR_Yxk}69 T>mi#OOOUXqtDnm{r-UW|2KzLu literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_expanded.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..829a0dee1861615172db5f23ff66719e0a831168 GIT binary patch literal 205 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

      {x?&WL203xr6P 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_open.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/folder_open.png new file mode 100644 index 0000000000000000000000000000000000000000..0bb4b74974ca6e573bbc99876cd5f62003d74821 GIT binary patch literal 1358 zcmV-U1+n^xP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KJavUoRh2L34mVhLL#B%5csL;{T$&33Kijy)I67*BT6c%a7D-CRj!s|TF*U*x6TK9xPQSg z30k>^x$pTEc742HY1@yF_F(7s9MzDah9k7Q&YUo3t8I^AQ56Kk|6_P#haG;Dqn_A4XFB!Fr=5P5vo>zha0P^xn>BBx)lMB-si&?zckA9u zuLFB+$Vfv+9yWZGQSa0?)sNI($^ADq+SGV~n)B>I4Q8{O3!2x7PG%s+i9p;Y0c>cV z%%W3DJjqRFv9JUYWn`%nPNPW-1XCy0L3ef!a)0C&pzi-f5dhp%@L zp5=b-&(SC64F-4w;yI@2Ch-RG%%-Vv-X{*Rk|-0O6Hn-LLE=ZQOAfzrF52wnnIS!s znkNns3&jqWI+&Gog?O4cEGsJId$SJ9oVPeDl^Sc^lfN*SS69+pr#XT+mXJUa0wmN> zMg=A!w5p^SNYQ@G#XoHOljM@fRR$x+0;*6T+J5jq_}#5hn3{Bwf-#``#j-xe0RJw~ ztXtOiv1K(+0N*okrMCUm1~B_cdcCcMkAVJd;NrTiNqfNM4lwkjiMnV@KAPS_0eC;7 zZ^{7!w?NOD(_3pFrw>4ex>~*g4i16wB4w|;ygSg@+rMX8{rv#0adN*ORO-M0000JJ zOGiWi{{a60|De66lK=n!32;bRa{vGh*8l(w*8xH(n|J^K00(qQO+^Re2p0??4#S5g z>i_@%TuDShR5;7+)3FVJFc3r07a}3C1zWHo6+1FVXrO=sA&QU`P+;l0^DoXmzMv5a z>t$y2Ie \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/globe.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/globe.svg new file mode 100644 index 0000000..3e4462e --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/groupby.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/groupby.png new file mode 100644 index 0000000000000000000000000000000000000000..76b55740797c27f49d95bf4bd14eb4487ac42fc2 GIT binary patch literal 479 zcmV<50U-W~P)KmOW3yKn#Z62vw*`DQ!cM*g#@}g|C5?KgG<>58xND zGqEtSvqfwyFqKkOQB}U7*yK%PT^yz+l`1T~>YblloQr*KXzs1z%-gJm0^;;o->!3) zH7-cUNs!WaSTSIeRaNsL>sifLSe}{>Snn8n;M%%>J;^C$Ux(bV27YevTebe$;Fo#9 zTDahdwF+&)*HQdX@g4XA#rG6HfUlJV(fLZoA?p$2vBB>Q?os-h9}GT;qjOP;SrsWs zPl_ohfKP0Zbx+x(e^8tQ;a!7|SU$yt)i-z_Yk$o>7P8~E<9lUA7|U^KI$R$cxpBkc z5$-V?`|qXGGINKen7c!(%H+v<7)$Bb9WIS~fN`DDzMGg-@X!ig!$K(jC z&*I47FZv;LzI-g)W<9|tog!3xDTh~~S`PQIQ?o$i^;yk(DtxBRTaqsYvd_AKFL1cn zCZ)x;hTl(0%YI$)4QFk}PFP=*{l`z5?-^x_B2??I41S>lSl=`a6+o=eZ<={Cq95Sp VxFo^FrK$h`002ovPDHLkV1kQu+(ZBX literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/hand.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/hand.svg new file mode 100644 index 0000000..8ed4eed --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/hand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/header.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/header.png new file mode 100644 index 0000000000000000000000000000000000000000..4efcb57ff77662e05de3d23e400280b78127682b GIT binary patch literal 9017 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/icon.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..298cfdfa66885eb171f240b4af1c6f2cd9e3c756 GIT binary patch literal 870 zcmV-s1DX7ZP)Fp7p$i`y(S_j7 zA5h#0ZrZirP7s%F6vTyFZ5QIsrMR+21*J$SrD@V?gQVoqNhUMncheLzlSn5S+I(@$sw|0BfO;}rUOyKM5JybX6}@zZ6jhy7@?6Lx5h9tcOL7mX=KH#!IK|x zHKSwJ1diK4jOCE0f$YfDcH-S12wQjD&7KI{UO-}5$7@!H&?5{RQ=Rml+@G%D415?D zpd&`-vryf7PXtmbmVy$Vt1{lwWohPat``!o@(8N>80LZJ}Wb^U>5S(Dr>3RGpV^VJ)QqGU-rdsb1_ z-cOEYnr#k<47s<6N4kZ(t@Px zV|_(c)w$`T;l*o%m_41wxjJxZcWjAixhDY{7a_S0Zy2WG6lH3cY_(dQ$>;MoQ<2ER zkwLu3SN{>HS%|tPXj_Eka(Nv74kVRcy5C?YVWYKyshHT40OLLZpP(lio7A=m%{g~_ z2s#mn!zY^SLb%*97kAOULqPcU0I@25YBr9wD!D}3vS7amG&U;Bc7?!;2N*vMJ|WBU znvhJvq+@P)@BriIdkv64wqek{>LuuHeccK!!UTLG7!0mI`Nchg2T-eiB!I{6zK)Hk zR4NVA1EW6e7ek>?`FjT8pp2)Aj6APg`3V(Y+~p83cPqXGL)x^O=JWgwUex3t=0f-9Znszw-prK{(xhG7jYOgXiB))yeH<#dZofRb8aKMh65v4Km(J=0tQxe zrh}*HlLr2tohObjWUF~<#BlwG<&g&AcZFKgNe6i} zfNYr$^8};!yxS34JUMjJ3C3@0i#mVas^%|TnZ!1yV0v))k9T{%%dlH>PGl;JESr7* z+|{QE>WW?mxX)euR&jJ~e$Hi8Zm9Tj<;&2I@{RDB)ul%4IcxY~~shuCjiJz7=%!}+XkP3S}BH?LlOXmQ{1 zbtX&xyQ`v;<^mP(Zkg7~vthON3ayZa*jUD$>Ib8bzq<89<;SOp*oW$l^*Ndhtbf|& z_sOY?7IbX4S=nH_$2U{x*PlA}wm*#j?DqCp9#AQ`XVkQh)Ab4a%EbAC=|-u?1WQ}Q jpDR|sd7z>M1oey&Pa+y;l`K*O#y*3mtDnm{r-UW|Gl}p9 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/inbox.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/inbox.svg new file mode 100644 index 0000000..761d6c7 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/inbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/info.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/info.png new file mode 100644 index 0000000000000000000000000000000000000000..abdc049cc5ffc83cbdb1f4222b54073be12f94ad GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%6^}NkxNd)TiA*hC?uO15>euupPQSSR|4cRFgO>bCYGe8 zD3oWGWGJ|M`Ua%vrLqIXjXhl)Lo7}wr$qdJXwTf*(Amh=(N8}GtED@mJsj0_u \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/lock.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/lock.svg new file mode 100644 index 0000000..7d0e70b --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/logo.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..298cfdfa66885eb171f240b4af1c6f2cd9e3c756 GIT binary patch literal 870 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/magnifying-glass.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/magnifying-glass.svg new file mode 100644 index 0000000..49f991b --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/magnifying-glass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/plus-large.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/plus-large.svg new file mode 100644 index 0000000..e017935 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/plus-large.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/plus.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/plus.svg new file mode 100644 index 0000000..2a81ab8 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/preview_placeholder.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/preview_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..cf1db0c87fd2efe0e0ee9eb2b6520b4b46d3006b GIT binary patch literal 2585 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 C7(-(K literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/question.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/question.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a03e533891b15f3dd04ff5944694a823efd32c GIT binary patch literal 1416 zcmV;31$X+1P)Hq)*I!Q!9RCt`_TU~5aMHv0IA)9?@OlfSZMo^(D3MNhE0S)oR5FeBm zN!38GwSnj>5rr5-;)4&Q7}Lb3CSpXaBu3x-k3y9!9(Cd zung`h6bcj4Y=G0f;AZe^wZ~VXtX|18U|=h_9xQ8iD2F;)B`<(6ZQxVj@9GcKMV)QZ zNWg%8a6%gg>h2fcfYSNkF3k^U%Y0wXuK@qh{DC&D$kOo^4MyX~KZ8&xQ>sc6uYwo3CkPtfMAYUmEL3_>=8tHcfd1INHG z!DHYl@T3Gw;@Myq$dP<8ILDDr+Ro+m6N$fxn(K4aAKwjSU6DZd4H~TY_B*nnFRAn0 zYCqL+ZeA=F&|v0aToL3V4tx=?XWwpvPUeG`~xnRjG*@G zkbaW_ZfuUH6wWvQpkxf_7}oTlZ*5V+H(3ZDO5gGb1tWtlEK&>@N@#198B*p$Xuf7v45(tUJGHb84R7J>0*PQ8su^;IIZb%A;wsl zt5-^Td}he!w74jRT)yGU+zl=fJIoH*BX03c zl=C63x72YbyMSxMU4Z@j@u&iL`*V?8YpJJ)6|hk91vP4|IC9so84~A=(c1Np=`# ztsW7-cpJ`t5mf-rUy0;H$<}$|2wOl|{Nlx^%y5yj6TD5bN0}{PpZLW`hI|HCd^k_+ zbFm#xf^jteu6miUg~#bW7Jukyfk7Mu$HWhQG34JZ{xAmLCo5CS2jT}O4Ef#S5AX4# zQURlq544Lv?BK_R^8siId(r>6I9ZUfQXaMGipckM0P+BR=0o)X2~JN#k}Vj&`%M~; zk;=oxGeR2tT*N@8&t}*Na2&d>vJ$=60{9P9!Z046$xu0!npU2-iuve{4Th_i;g_5e z)8MD$?*)o~X6Od>Py$(+_*# z{7X~+d07R7d-MVDPnkZTF9WqQY6cll35Suak?Dgqp--2gZj=RIcpb?WX?|=8eW?jk zm}vv}sx&WX`-Z3jkrfb*2ZItEJZ?77=0Q{3G1j%YFh0ja)3)b^`P0`)Lm6JBvkidq z%@3MRiYJ23s1Dq?0{nVC`vGxyR|1sZgTnR#ul8XBB0<`G-p7blGBd^ahE?DpSJdfEiKI!55yvYCS W%N7&b=!ZoB00000wZ%Yi{k(Q11L#E zK~#9!?VC$TRY4elKQAKY<5H_=6HyW2E-;C5dRSm-643)%Lq4b)WYMLb7pcrxVwAi&i(lRnSajt4|qHt zkH_Qjcs!nYOpy(f2*Rigs07M^AHcYhVsu`K3Bo83Yyq|bYk(?X(OGtOAuE6mpx&VO zkHB#yMYj`Tf-pJ=TnEZh%G7JXNhQUUm12T0$^o6g(F`_{KA=%aF>IBXAdE_Y+rXX- zciFceJyY) zvs4PgXsOQY3JZ@rGeDh^;zJMNBhpam4tpq;Dz>rFafXf@xs!Y>K`(5wqSgDFDU5M$@UZ z9XHu(TFhEU#Z;RXv&vC1%Z)9*K^T<+6Szycl49IM#N=_C3R9`H&~Y(&Q({IO7c*i? z%#`C|W=vMT6F{khQYMuY3rud;{fUXYu^4-GpaWfBNe5u>CS1FkqCrb|ijEv<+FXazo4E@ce3 z5a+_!Vst0dG0VlYC@H?ADn`rc0WMoApl48)r z+*5g%KnrRF4(S~%ZsXvfKBtAIgrq9w4@r5wNN=X_xOXM6002ovPDHLkV1h7kji&$r literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/radio_button_checked_white.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/radio_button_checked_white.png new file mode 100644 index 0000000000000000000000000000000000000000..b896637bd28b1c741c51b99a2f2d16ee58dad73e GIT binary patch literal 943 zcmV;g15o^lP)b+a(^Kdf%=!>2&tSli9_Su4W99TiXQ3sr>*Eb7(F+ZEm{E^$=wc}i zLeiU{M+F=5H}9aH*mcbfl05@WG})B-+<+Fxu6IL_TnltNpds@agjU7&U;%W;pa+pm znPV7Q8{3QDSl3eSM>b`SQD~)aomz@823&_u7IZFOwnGnX>@ml>fi^|1`qazo&DXmA zJOZ`*oTo|5Lfv>=8-q74J^WS)ZD7Ska}CM9xzzHp6M&McoAxo<4jm@mxosgXN>t})-4oGx03S^wZ5@Uu1F)6^hp%P=B2x3y8pHo<3%yU6Z3Owc% zW*dV6EW_ayH!d<`$omZ^Ksr&?Cya~5U2cGA&KHktdbNHJrMFhRkZEWGTFggIkf_Dr zBHwVhCW(!}9j+;a&nf}E&lW4>Leko_@8g6288 zq1Q#6&jT{$6!IC0oX4M_TeaKf@6>EW73zxZK|`$Dc6JH+5zrLcn7A%>-E)CNJE50N zHe|}WjnL_CWvz#Gt>-i}Qm`S^8vATnT1g{n2GQ1e+V1M}FF^)f31LXAzfbl<2aH?p zrB8}Ab&Aq!KxW(?zX9X^J_$D6k=p-Cq#5H@BdRbW_pH96D2k#eilQhIegT|h@|iSc RM^gX*002ovPDHLkV1iEeqnrQ$ literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/radio_button_unchecked_black.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/radio_button_unchecked_black.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a78cacdcf41b1c1244a84ec4a65f7cfced809f GIT binary patch literal 1128 zcmV-u1eg1XP)10eGz>lgq41NBKn zK~#9!?VD?I(@GG9KikByz#yi%krf&X0Dzv0JTE5|+u-r3Ncjsx>q03XsM{@zk@ z_*yynnP^TUv+Y`Nw3?K6ZIA+xCUKc2@g?xhIKB2m?1UImnX{pS~IWgwGx({ksg;o3~-_B|)2-z0)IAtv&im_eJwnAz^WG{d}u96eY+LJS0g-yPTc^ZG`Ow^h9C=ENS%aCUNqpy8W8n9~)F8`?$TKt2RlBW9Bij%& zQQLtt&$Q)~Up1qWs!i;k7^&Eel-3-2qAh)8MmO8GYqyOmV->p3v%J{bF)8c80#jQ? z&NJT{t@)_dd9&m2eWpV6s7Y6J>jz1bcnW+`ndaMFkdx)bF>q|0nkm`ZBSy&ita5~b zkkf0KlykLV-A;8$r9&m8-dm;63$QBn;SOq;H6YjCIsyiw$=ouBpT zN{K!fHTV11Ru8>n`3=6R*(S`X+NR$u%;5DzLync~E2(_W9on?zTE% zLsnPZR&Qn}9$`!C=e=}bOh!gVMn*}pDlER{*5<`US(9aRc zR={pwNp46+M9?f?za>N=h6q`wpRXi4HMbNl@<{T+QUI>C!2-8y*XW67u85r9fz&P` zI59*D+~w5FgQ)~wWK1&A#0!o~=o7BEU2zNgybf(WL5ZQ4IH8|Is~IE=%se)DDNp^w zC6CQKcuPEx^r-(=pZ+C+5W^`KR(8SR)tul&41bMX(KL=3XqN$7>a}RXJnV~Wf36mDB(9MGez__T5=73#%!6-%LszR& z6T?N8tU!lNSSAn{h-<{b-MSkW!Np>vdBR%8E(6B`eWa-=2jYE~epJM;S;|6g9CL>2 zfr+@@CcUfHd=^4$F>oR2v$xs-6G7?)eXAy)3!x=O)&?)DO3xpGrv%cSq7x(MB~$HS zi6OI-dZA29%%-@0ti7ulkos+CA6}Xm4!rg>zsZpLt!e8Sjm6ma23r)01iQ9Ud57j^ zJLNU0sH;LUVwz6GM^NdnA;vD`)J0QbcKGpG+S>S{7E>_u`Fw8Y42x6PYjjRV&#l9+pKA3nrjaHqA71b{WmcT-PaRK)P| zp`3#_FC9jPT!VQgz17nf7gvxAQ(I)VjfyqAdm$~^X=%iT7z`v+--*k>5rOsSVqS#u z;>M*DH8H$mHxx~<8mHyM&>%gKqNOeq*X>%@tO9qEsT+GZ>ZyH5h=T>vT88ycEQS*? zY&BO_KW8gW-*9P}qK7`aqRuZugQ7MVi6)rw`6|evF%RhHKr|t9j%sdS3SKWkE}*de^t?niNTjrwG-qF=Zx+&1Xqe5`Z6SgS!mteY-?Bn0i^SiD>W zL(GC@z+KwhM^!M#{m4AS7~90LPlm&-P@;!k)WWo65ZX#4{-*yWfR%xeaZExAr2g-d zVuKw-A){a#QMY!Cmxr4nhD>9o{wg%>|CMGeZw)-k&%&+k&*F_;SZ3%YGFG^ R%>n=b002ovPDHLkV1fbiDp&vj literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/search.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/search.png new file mode 100644 index 0000000000000000000000000000000000000000..083a9ee05e18bce52c2df1713c803b9c4de33a09 GIT binary patch literal 549 zcmV+=0^0qFP)mX^91IhuZja3{tNNy4rk`l>P*@KI3 z1OkS=h@6&BBnbLjtP+Kx!;TM3)L|vo- zY?3Ygouu2hdV=IIzN=7Y!|_)5p;l3?+hgR86x;MK)BdG!sBWm$CXzI$l=m8rAy;(J zj-geWeB^*ULS;b$nSq&hNuC`;s{m5Tjs7koMD2$fB)p=!KIL6N{E z{eHM0xq@;QR!B-1Td9@{WX5_$a;Hz-qTM+Ur_mdICNJg26mf}Ht n>NALD#83^0usp~07X`cnOC)E9gF#>=00000NkvXXu0mjff9Cpp literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/search.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/search.svg new file mode 100644 index 0000000..acd3282 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/settings.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..5ec088e240f03fb931398c1e695eee4100ac89ba GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt_f1s;*b z3=Hg3L6|XH;5bl>LB-R>F~s9|a)Jaa3xl%IZ+qUea;%FJOyql-0u5$ebThuiz|0Vt Vz|3->vr-JC!PC{xWt~$(69CtQAy)tZ literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/share.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/share.svg new file mode 100644 index 0000000..2f3151d --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/share.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/shot.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/shot.svg new file mode 100644 index 0000000..823951e --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/shot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sliders.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sliders.svg new file mode 100644 index 0000000..bfca789 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sliders.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sortby.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sortby.png new file mode 100644 index 0000000000000000000000000000000000000000..64c574f04b309fd536f42bf2b6926ffda9044270 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zoCO|{#S9FLD?pg>p5rA~AVb2_ z#WBRAGg*T53fq~ACpwKkIQcB=6vP;k(U@Tn@{2T+KSoBLbX~M zdF1&bv`iTuvGPo);+5XO@W_l!i(y72Jyu%vyFg?Dr-TGUCTCE>h47%|z<^`$boFyt=akR{0IP_1 A8~^|S literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sync.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/sync.png new file mode 100644 index 0000000000000000000000000000000000000000..93290a927e0c7f5a0dc7a9a35a4f25d3cd2712d2 GIT binary patch literal 621 zcmV-z0+RiSP)KmdmS+Q5eP_x8t~rQY4&kigM3{A#oBJa8k|y6-$7gol`t|j#?_KLzd#!gp zYpXBHj()w!9|BG3{R@16?_~>)gEm+Jv!FS(e}ZdpHt{I64}}gmU1+PsfCfSycmo`S zc6bNp;Z%CQgsCZK9eji9Fab`&MYyTV7!BR<8V)_@P)47DieLE{F2UzqLGSBUcmZpax6j_QR+s^u@DYCG3c8awdbeWMIk6dD!5et1 z*h^RN^6JD|18!23`hNJDDd=i^s^5#yV_ay|aRgk2eQI36y^8)-?~@cIeNM3~|6OpD z;xOMRVQg3SG8kJ=&|>!$1@Nyi1&+efdP$zZNR<=w6z90DTA&y<;hvHNXDZI{?RtV` zg)4j|+=7S254FzWMA#0)3T<|cV{j%@a5gM~UGTnLz^!a1d zy6ZeUyTo1n@>A!HhlPsUeVXD(x$LhfE?k#?_MfS~C@G|$?A>qbqL5sm00000NkvXX Hu0mjfcmE#e literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/tag.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/tag.png new file mode 100644 index 0000000000000000000000000000000000000000..81375f889a308e1db4eb812f8b2bebe379257698 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@KN#5=*KpF^sI`6IrQk(@Ik;M!Q z%bjNYt$JbauTG3Qd!Da7T%%dAp|lL> OI|ffzKbLh*2~7Y5gMOg^ literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/thumbnail.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..c77cdf37ea5760fbd1fae8be6755e4e70ce95128 GIT binary patch literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgn3BBRT^Rni_n+Ah4nJ za0`PlBg3pY5H=O_6MADTznb_pMQ>JU|{^@>EaktaqI2u+mo6V1YFV$w*UQK z-&@gmvppxPH?X8ZBW&0FqKzvoFWIWBa1mf}1fu)eaaImIu`84|JLk@m+4@G9q2;C5 z^SSWfecgS z4v4TO^aZB*837%J3utgJSgdzHVfoq9-*Z|&$C}-#Vr$7#5?j@urTBYC&Z&8C1R0~= z&DXaK7TU)0VrOOL{R#Ta33qo+*_ioBMN#&^##HaTk2_|i{t4_;nek-ZCyj-18=9Yb z9{Hj&!zb2th1yJW$@9}^&S)`dNV^dF?Ck^R?b%Dz4yu$+{kC+RlNM=AoPfVDK_;&zsuvd zH&l)=>}Z{RVBXRzI>1rm8CMzJ6u*0FVdQ&MBb@0Bm&ubpQYW literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/thumbnail_solid.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/thumbnail_solid.png new file mode 100644 index 0000000000000000000000000000000000000000..03dc926004b0a61050afda46ca61aa345d3c310a GIT binary patch literal 679 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgn3BBRT^Rni_n+Ah4nJ za0`PlBg3pY5H=O_6J;|{7gc&CQ&zmnk+nB978H@y`Amff6GAR$aB}by19M@ zi>hCK{~y7+Bp^(++T)0QWA#FzB^&3a&pz5QQLnqLHz7#KMm7?=ba7+4fgnICi* zOzkeseRF!be|~BXMS9dEe@k%jFjL zI9(ToSSGbC-g{!nw#7#+75NfMCu&*iB&=C`dR2tFNZ`s(b*59yGQqb@} zh;>4#znpH$d+X31VJAkOv`gWi@7nCjh|QbaZlx%);MM-gt0ueOy;jPs-oj`R^i-+8 zs!M0DuoHvXyMC+Zf%&h!-n0Du+F%~aka;G5&add{$2niUX8FrCCwe;j!~Vsks-;b0 z38n_2OiRm~_!eB=mDjYOq>0U8s+M5T*OrG2+pbNm;|=kX;0ySf$F#3sxb66h*_F<1 zkL-(Cc1Sjy%$mnozFvM4(~Z}Rv(_*~**eS>by&+bA=ix~yINRx&VJ8ZKBv-OzPRQ0 zn!D~!t^9GR(+7MV(mMo?X?(0|&yA?w@-H_68tH5H3-KNnc=$6a9+<2cJYD@<);T3K F0RRtb5<>t0 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/times.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/times.svg new file mode 100644 index 0000000..c528bcd --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/times.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/trash.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/trash.svg new file mode 100644 index 0000000..6305280 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/trash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/tree.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/tree.svg new file mode 100644 index 0000000..a3c7f93 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/user.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/user.svg new file mode 100644 index 0000000..591873a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/users.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/users.svg new file mode 100644 index 0000000..3f07aab --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/users.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/vehicle.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/vehicle.svg new file mode 100644 index 0000000..9b23899 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/vehicle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/video.svg b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/video.svg new file mode 100644 index 0000000..e14b3b9 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_all.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_all.png new file mode 100644 index 0000000000000000000000000000000000000000..d17e0155eb7f527b5076e07b25630e01fa6e3f43 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zY)RhkE)4%caKYZ?lYt_f1s;*b z3=E7bK$!8K<0V(1AbW|YuPgflE>2Mf$;s>VK}MB%x;Tb-9Dh6QAa8?$0E>Gvr<3rl zdR4Q=8_abIiqo0nvrM*g_TSFQllvZV;EQ^t!rd=5jXqoztbJMY8ht-9$_Pl$WYD>} zoW18j+}V{6r!U>>Gv)O0u$esAy2Y;KfC5*<=TyeiJ|{l!j_0}jy_88m W(LtbaKASnv1q`09elF{r5}E)2+fM`l literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_compact.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_compact.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc568886cd5c70440881df8fc761ef5cff68704 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zY)RhkE)4%caKYZ?lYt_f1s;*b z3=E7bK$!8K<0V(1AbW|YuPgflE>12chD)7{u|T05PZ!4!kK=ErUF2*q;9>PIWZoKV z(R|ptIXGhO!ha!}K_XhAQ_2NCeb<}N&vInGLBr{gw8}NU;n;(!!DO8K8 z*?wS(MoIgcxu0I{_0(9{BIKp<&~#&U#P54dM|+uN()NB&>Uh7I>B0)r(1pqi769#K N@O1TaS?83{1OPTwOn(3X literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_settings.png b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/icons/view_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef173ef1bb5d13c31800ca7e897486f4f6999ba GIT binary patch literal 488 zcmVP)C)y*qJQ5eVZXOP6kTTwI%3k#*BVIj(fvJ*SW&JIgU z{{Vl0Y!r&f#D<+>VPT<&$OfT|NE&$w@jab$bGqG`am|=8zxveNw{zyXbDlHu?~|S4 z@$wPCoBVJJ5jGP&V-#6lH|DsGOFYiS$^)Y2^BAhofMP7*9CPOSD{kBaRO8);TkF|V zbXv#L9`}dT1-qIfl#0I!om`^@OQK(85EB?N*F7stCheksyEW`1f=aI&11X%e23@$v zjOeQWMk-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pIsiCsuj`VHIfM?fLj%#er@=ltB<)VvZPmw~~#C^fMp zHASI3vm`^o-P1Q9MK6^dC~oZO;uvCaI{8oigopObtqq-xTn$=n8y-yE>ip@Y;xWYs qa|4|{dXsD}TJ>D!3_X \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/utils.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/utils.py new file mode 100644 index 0000000..f53e551 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/utils.py @@ -0,0 +1,1739 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import re +import os +import sys +import json +import uuid +import errno +import ctypes +import shutil +import locale +import logging +import getpass +import random +import tempfile +import platform +import threading +import traceback +import collections +import distutils.version + +from datetime import datetime + +try: + from collections import Mapping +except ImportError: + from collections.abc import Mapping + +# Use the built-in version of scandir/walk if possible, +# otherwise use the scandir module version +try: + from scandir import walk +except ImportError: + from os import walk + +import studiolibrary + +from studiovendor import six +from studiovendor.six.moves import urllib + + +__all__ = [ + "reload", + "user", + "isMac", + "isMaya", + "isLinux", + "isWindows", + "addLibrary", + "setLibraries", + "removeLibrary", + "defaultLibrary", + "checkForUpdates", + "read", + "write", + "update", + "saveJson", + "readJson", + "updateJson", + "replaceJson", + "readSettings", + "saveSettings", + "updateSettings", + "settingsPath", + "relPath", + "absPath", + "tempPath", + "realPath", + "normPath", + "normPaths", + "copyPath", + "movePath", + "movePaths", + "listPaths", + "splitPath", + "localPath", + "removePath", + "renamePath", + "formatPath", + "pathsFromUrls", + "resolveModule", + "createTempPath", + "renamePathInFile", + "walkup", + "generateUniquePath", + "MovePathError", + "RenamePathError", + "timeAgo", + "modules", + "setDebugMode", + "showInFolder", + "stringToList", + "listToString", + "registerItem", + "registerItems", + "registeredItems", + "runTests", + "findItemsInFolders", + "isVersionPath", + "latestVersionPath", +] + + +logger = logging.getLogger(__name__) + + +_itemClasses = collections.OrderedDict() + + +class PathError(IOError): + """ + Exception that supports unicode escape characters. + """ + def __init__(self, msg): + """ + :type: str or unicode + """ + msg = six.text_type(msg) + super(PathError, self).__init__(msg) + self._msg = msg + + def __unicode__(self): + """ + Return the decoded message using 'unicode_escape' + + :rtype: unicode + """ + return six.text_type(self._msg) + + +class MovePathError(PathError): + """""" + + +class RenamePathError(PathError): + """""" + + +def reload(): + """ + Removes all Studio Library modules from the Python cache. + + You can use this function for developing within DCC applications, however, + it should not be used in production. + + Example: + import studiolibrary + studiolibrary.reload() + + import studiolibrary + studiolibrary.main() + """ + os.environ["STUDIO_LIBRARY_RELOADED"] = "1" + + from studiolibrary import librarywindow + librarywindow.LibraryWindow.destroyInstances() + + names = modules() + + for mod in list(sys.modules.keys()): + for name in names: + if mod in sys.modules and mod.startswith(name): + logger.info('Removing module: %s', mod) + del sys.modules[mod] + + +def defaultLibrary(): + """ + Get the name of the default library. + + :rtype: str + """ + libraries = readSettings() + + # Try to get the library that has been set to default + for name in libraries: + if libraries[name].get("default"): + return name + + # Try to get the library named Default + if "Default" in libraries: + return "Default" + + # Try to get a library + for name in libraries: + return name + + # Otherwise just return the name "Default" + return "Default" + + +def addLibrary(name, path, **settings): + """ + Add a new library with the given name, path and settings. + + :type name: str + :type path: path + :type settings: dict + """ + libraries = readSettings() + libraries.setdefault(name, {}) + libraries[name]["path"] = path + + update(libraries[name], settings) + + saveSettings(libraries) + + +def removeLibrary(name): + """ + Remove a library by name. + + :type name: str + """ + libraries = readSettings() + if name in libraries: + del libraries[name] + saveSettings(libraries) + + +def setLibraries(libraries): + """ + Remove existing libraries and set the new. + + Example: + import studiolibrary + + libraries = [ + {"name":"test1", "path":r"D:\LibraryData", "default":True}}, + {"name":"test2", "path":r"D:\LibraryData2"}, + {"name":"Temp", "path":r"C:\temp"}, + ] + + studiolibrary.setLibraries(libraries) + + :type libraries: list[dict] + """ + for library in libraries: + addLibrary(**library) + + old = readSettings().keys() + new = [library["name"] for library in libraries] + + remove = set(old) - set(new) + for name in remove: + removeLibrary(name) + + +def modules(): + """ + Get all the module names for the package. + + :rtype: list[str] + """ + names = [] + dirname = os.path.dirname(os.path.dirname(__file__)) + for filename in os.listdir(dirname): + names.append(filename) + return names + + +def setDebugMode(level): + """ + Set the logging level to debug. + + :type level: int + :rtype: None + """ + if level: + level = logging.DEBUG + else: + level = logging.INFO + + for name in modules(): + logger_ = logging.getLogger(name) + logger_.setLevel(level) + + +def resolveModule(name): + """Resolve a dotted name to a global object.""" + name = name.split('.') + used = name.pop(0) + found = __import__(used) + for n in name: + used = used + '.' + n + try: + found = getattr(found, n) + except AttributeError: + __import__(used) + found = getattr(found, n) + return found + + +def registerItems(): + """Register all the items from the config file.""" + for name in studiolibrary.config.get("itemRegistry"): + cls = resolveModule(name) + studiolibrary.registerItem(cls) + + +def registerItem(cls): + """ + Register the given item class to the given extension. + + :type cls: studiolibrary.LibraryItem + :rtype: None + """ + global _itemClasses + _itemClasses[cls.__name__] = cls + + +def registeredItems(): + """ + Return all registered library item classes. + + :rtype: list[studiolibrary.LibraryItem] + """ + return _itemClasses.values() + + +def clearRegisteredItems(): + """ + Remove all registered item classes. + + :rtype: None + """ + global _itemClasses + _itemClasses = collections.OrderedDict() + + +def tempPath(*args): + """ + Get the temp directory set in the config. + + :rtype: str + """ + temp = studiolibrary.config.get("tempPath") + return normPath(os.path.join(formatPath(temp), *args)) + + +def createTempPath(name, clean=True, makedirs=True): + """ + Create a temp directory with the given name. + + :type name: str + :type clean: bool + :type makedirs: bool + + :rtype: bool + """ + path = tempPath(name) + + if clean and os.path.exists(path): + if os.path.exists(path): + shutil.rmtree(path) + + if makedirs and not os.path.exists(path): + os.makedirs(path) + + return path + + +def pathsFromUrls(urls): + """ + Return the local file paths from the given QUrls + + :type urls: list[QtGui.QUrl] + :rtype: collections.Iterable[str] + """ + for url in urls: + path = url.toLocalFile() + + # Fixes a bug when dragging from windows explorer on windows 10 + if isWindows(): + if path.startswith("/"): + path = path[1:] + + yield path + + +def findItems(path, depth=3, **kwargs): + """ + Find and create items by walking the given path. + + :type path: str + :type depth: int + + :rtype: collections.Iterable[studiolibrary.LibraryItem] + """ + path = normPath(path) + + maxDepth = depth + startDepth = path.count(os.path.sep) + + for root, dirs, files in walk(path, followlinks=True): + + files.extend(dirs) + + for filename in files: + remove = False + + # Normalise the path for consistent matching + path = os.path.join(root, filename) + item = itemFromPath(path, **kwargs) + + if item: + # Yield the item that matches/supports the current path + yield item + + # Stop walking the dir if the item doesn't support nested items + if not item.ENABLE_NESTED_ITEMS: + remove = True + + if remove and filename in dirs: + dirs.remove(filename) + + if depth == 1: + break + + # Stop walking the directory if the maximum depth has been reached + currentDepth = root.count(os.path.sep) + if (currentDepth - startDepth) >= maxDepth: + del dirs[:] + + +def findItemsInFolders(folders, depth=3, **kwargs): + """ + Find and create new item instances by walking the given paths. + + :type folders: list[str] + :type depth: int + + :rtype: collections.Iterable[studiolibrary.LibraryItem] + """ + for folder in folders: + for item in findItems(folder, depth=depth, **kwargs): + yield item + + +def user(): + """ + Return the current user name in lowercase. + + :rtype: str + """ + return getpass.getuser().lower() + + +def system(): + """ + Return the current platform in lowercase. + + :rtype: str + """ + return platform.system().lower() + + +def isMaya(): + """ + Return True if the current python session is in Maya. + + :rtype: bool + """ + try: + import maya.cmds + maya.cmds.about(batch=True) + return True + except ImportError: + return False + + +def isMac(): + """ + Return True if the current OS is Mac. + + :rtype: bool + """ + return system().startswith("os") or \ + system().startswith("mac") or \ + system().startswith("darwin") + + +def isWindows(): + """ + Return True if the current OS is windows. + + :rtype: bool + """ + return system().startswith("win") + + +def isLinux(): + """ + Return True if the current OS is linux. + + :rtype: bool + """ + return system().startswith("lin") + + +def localPath(*args): + """ + Return the users preferred disc location. + + :rtype: str + """ + path = os.getenv('APPDATA') or os.getenv('HOME') + path = os.path.join(path, "StudioLibrary", *args) + + return path + + +def formatPath(formatString, path="", **kwargs): + """ + Resolve the given string with the given path and kwargs. + + Example: + print formatPath("{dirname}/meta.json", path="C:/hello/world.json") + # "C:/hello/meta.json" + + :type formatString: str + :type path: str + :type kwargs: dict + :rtype: str + """ + logger.debug("Format String: %s", formatString) + + dirname, name, extension = splitPath(path) + + encoding = locale.getpreferredencoding() + + # Environment variables return raw strings so we need to convert them to + # unicode using the preferred system encoding + + temp = tempfile.gettempdir() + if temp: + + temp = six.text_type(temp) + + username = user() + if username: + username = six.text_type(username) + + local = os.getenv('APPDATA') or os.getenv('HOME') + if local: + local = six.text_type(local) + + kwargs.update(os.environ) + + labels = { + "name": name, + "path": path, + "root": path, # legacy + "user": username, + "temp": temp, + "home": local, # legacy + "local": local, + "dirname": dirname, + "extension": extension, + } + + kwargs.update(labels) + + resolvedString = six.text_type(formatString).format(**kwargs) + + logger.debug("Resolved String: %s", resolvedString) + + return normPath(resolvedString) + + +def copyPath(src, dst, force=False): + """ + Make a copy of the given src path to the given destination path. + + :type src: str + :type dst: str + :type force: bool + :rtype: str + """ + dirname = os.path.dirname(src) + + if "/" not in dst: + dst = os.path.join(dirname, dst) + + src = normPath(src) + dst = normPath(dst) + + logger.info(u'Copying path "{0}" -> "{1}"'.format(src, dst)) + + if src == dst: + msg = u'The source path and destination path are the same: {0}' + raise IOError(msg.format(src)) + + if not force and os.path.exists(dst): + msg = u'Cannot copy over an existing path: "{0}"' + raise IOError(msg.format(dst)) + + if force and os.path.exists(dst): + if os.path.isdir(dst): + shutil.rmtree(dst) + else: + os.remove(dst) + + # Make sure the destination directory exists + dstDir = os.path.dirname(dst) + if not os.path.exists(dstDir): + os.makedirs(dstDir) + + if os.path.isfile(src): + shutil.copy(src, dst) + else: + shutil.copytree(src, dst) + + logger.info("Copied path!") + + return dst + + +def movePath(src, dst): + """ + Move the given source path to the given destination path. + + :type src: str + :type dst: str + :rtype: str + """ + src = six.text_type(src) + dirname, name, extension = splitPath(src) + + if not os.path.exists(src): + raise MovePathError(u'No such file or directory: {0}'.format(src)) + + if os.path.isdir(src): + dst = u'{0}/{1}{2}'.format(dst, name, extension) + dst = generateUniquePath(dst) + + shutil.move(src, dst) + return dst + + +def movePaths(srcPaths, dst): + """ + Move the given src paths to the given dst path. + + :type srcPaths: list[str] + :type dst: str + """ + if not os.path.exists(dst): + os.makedirs(dst) + + for src in srcPaths or []: + + if not src: + continue + + basename = os.path.basename(src) + + dst_ = os.path.join(dst, basename) + dst_ = normPath(dst_) + + logger.info(u'Moving Content: {0} => {1}'.format(src, dst_)) + shutil.move(src, dst_) + + +def silentRemove(filename): + """ + Silently remove a file, ignore if it doesn't exist. + + Workaround for #237 where `os.path.exists` gave false + positives and removal of files failed because of it. + + :type filename: str + :rtype: None + + """ + try: + os.remove(filename) + except OSError as e: + # Ignore case of no such file or directory + if e.errno != errno.ENOENT: + raise + + +def removePath(path): + """ + Delete the given path from disc. + + :type path: str + :rtype: None + """ + if os.path.isfile(path): + os.remove(path) + elif os.path.isdir(path): + shutil.rmtree(path) + + +def renamePath(src, dst, extension=None, force=False): + """ + Rename the given source path to the given destination path. + + :type src: str + :type dst: str + :type extension: str + :type force: bool + :rtype: str + """ + dirname = os.path.dirname(src) + + if "/" not in dst: + dst = os.path.join(dirname, dst) + + if extension and extension not in dst: + dst += extension + + src = normPath(src) + dst = normPath(dst) + + logger.debug(u'Renaming: {0} => {1}'.format(src, dst)) + + if src == dst and not force: + msg = u'The source path and destination path are the same: {0}' + raise RenamePathError(msg.format(src)) + + if os.path.exists(dst) and not force: + msg = u'Cannot save over an existing path: "{0}"' + raise RenamePathError(msg.format(dst)) + + if not os.path.exists(dirname): + msg = u'The system cannot find the specified path: "{0}".' + raise RenamePathError(msg.format(dirname)) + + if not os.path.exists(os.path.dirname(dst)) and force: + os.mkdir(os.path.dirname(dst)) + + if not os.path.exists(src): + msg = u'The system cannot find the specified path: "{0}"' + raise RenamePathError(msg.format(src)) + + os.rename(src, dst) + + logger.debug(u'Renamed: {0} => {1}'.format(src, dst)) + + return dst + + +def read(path): + """ + Return the contents of the given file. + + :type path: str + :rtype: str + """ + data = "" + path = normPath(path) + + if os.path.isfile(path): + with open(path) as f: + data = f.read() or data + + data = absPath(data, path) + + return data + + +def write(path, data): + if six.PY2: + write2(path, data) + else: + write3(path, data) + + +def write2(path, data): + """ + Write the given data to the given file on disc. + + :type path: str + :type data: str + :rtype: None + """ + path = normPath(path) + data = relPath(data, path) + + tmp = path + ".tmp" + bak = path + ".bak" + + # Create the directory if it doesn't exists + dirname = os.path.dirname(path) + if not os.path.exists(dirname): + os.makedirs(dirname) + + # Use the tmp file to check for concurrent writes + if os.path.exists(tmp): + msg = "The path is locked for writing and cannot be accessed {}" + msg = msg.format(tmp) + raise IOError(msg) + + # Safely write the data to a tmp file and then rename to the given path + try: + # Create and write the new data + # to the path.tmp file + with open(tmp, "w") as f: + f.write(data) + f.flush() + + # Remove any existing path.bak files + silentRemove(bak) + + # Rename the existing path to path.bak + if os.path.exists(path): + os.rename(path, bak) + + # Rename the tmp path to the given path + if os.path.exists(tmp): + os.rename(tmp, path) + + # Clean up the bak file only if the given path exists + if os.path.exists(path) and os.path.exists(bak): + silentRemove(bak) + + except: + # Remove the tmp file if there are any issues + silentRemove(tmp) + + # Restore the path from the current .bak file + if not os.path.exists(path) and os.path.exists(bak): + os.rename(bak, path) + + raise + + +def write3(path, data): + """ + Writes the given data to a file atomically by first writing to a + temp file and then renaming it. + + This approach avoids using the tempfile module to keep permissions + consistent with the write2 function. + """ + path = normPath(path) + data = relPath(data, path) + + dirname = os.path.dirname(path) + if not os.path.exists(dirname): + os.makedirs(dirname) + + tmp = None + + try: + + # Create a temporary file with a random name + characters = "abcdefghijklmnopqrstuvwxyz0123456789_" + name = ''.join(random.choice(characters) for _ in range(8)) + tmp = os.path.join(dirname, name + ".delete") + + with open(tmp, "w") as f: + f.write(data) + f.flush() + + # Introduced in python 3.3 + os.replace(tmp, path) + + finally: + if tmp and os.path.exists(tmp): + os.remove(tmp) + + +def update(data, other): + """ + Update the value of a nested dictionary of varying depth. + + :type data: dict + :type other: dict + :rtype: dict + """ + for key, value in other.items(): + if isinstance(value, Mapping): + data[key] = update(data.get(key, {}), value) + else: + data[key] = value + return data + + +def updateJson(path, data): + """ + Update a json file with the given data. + + :type path: str + :type data: dict + :rtype: None + """ + data_ = readJson(path) + data_ = update(data_, data) + saveJson(path, data_) + + +def saveJson(path, data): + """ + Serialize the data to a JSON string and write it to the given path. + + :type path: str + :type data: dict + :rtype: None + """ + path = normPath(path) + + data = collections.OrderedDict(sorted(data.items(), key=lambda t: t[0])) + data = json.dumps(data, indent=4) + write(path, data) + + +def readJson(path): + """ + Read the given JSON file and deserialize to a Python object. + + :type path: str + :rtype: dict + """ + path = normPath(path) + + logger.debug(u'Reading json file: {0}'.format(path)) + + data = read(path) or "{}" + data = json.loads(data) + + return data + + +def settingsPath(): + """ + Get the settings path from the config file. + + :rtype: str + """ + formatString = studiolibrary.config.get('settingsPath') + return studiolibrary.formatPath(formatString) + + +def updateSettings(data): + """ + Update the existing settings with the given data. + + :type data: dict + """ + settings = studiolibrary.readSettings() + update(settings, data) + studiolibrary.saveSettings(settings) + + +def readSettings(): + """ + Get all the user settings. + + :rtype: dict + """ + path = settingsPath() + + logger.debug(u'Reading settings from "%s"', path) + + data = {} + + try: + data = studiolibrary.readJson(path) + except Exception as error: + logger.exception('Cannot read settings from "%s"', path) + + return data + + +def saveSettings(data): + """ + Save the given data to the settings path. + + :type data: + """ + path = settingsPath() + + logger.debug(u'Saving settings to "%s"', path) + + try: + studiolibrary.saveJson(path, data) + except Exception: + logger.exception(u'Cannot save settings to "%s"', path) + + +def replaceJson(path, old, new, count=-1): + """ + Replace the old value with the new value in the given json file. + + :type path: str + :type old: str + :type new: str + :type count: int + :rtype: dict + """ + old = six.text_type(old) + new = six.text_type(new) + + data = read(path) or "{}" + data = data.replace(old, new, count) + data = json.loads(data) + + saveJson(path, data) + + return data + + +def renamePathInFile(path, src, dst): + """ + Rename the given src path to the given dst path. + + :type path: str + :type src: str + :type dst: str + :rtype: None + """ + src = normPath(src) + dst = normPath(dst) + + src1 = '"' + src + '"' + dst2 = '"' + dst + '"' + + # Replace paths that match exactly the given src and dst strings + replaceJson(path, src1, dst2) + + src2 = '"' + src + dst2 = '"' + dst + + # Add a slash as a suffix for better directory matching + if not src2.endswith("/"): + src2 += "/" + + if not dst2.endswith("/"): + dst2 += "/" + + # Replace all paths that start with the src path with the dst path + replaceJson(path, src2, dst2) + + +def relPath(data, start): + """ + Return a relative version of all the paths in data from the start path. + + :type data: str + :type start: str + :rtype: str + """ + rpath = start + + for i in range(0, 3): + + rpath = os.path.dirname(rpath) + token = os.path.relpath(rpath, start) + + rpath = normPath(rpath) + token = normPath(token) + + if rpath.endswith("/"): + rpath = rpath[:-1] + + data = data.replace(rpath, token) + + return data + + +def absPath(data, start, depth=3): + """ + Return an absolute version of all the paths in data using the start path. + + :type data: str + :type start: str + :type depth: int + :rtype: str + """ + token = ".." + pairs = [] + path = normPath(os.path.dirname(start)) + + # First create a list of tokens and paths. + for i in range(1, depth+1): + rel = ((token + "/") * i) + pairs.append((rel, path)) + path = normPath(os.path.dirname(path)) + + # Second replace the token with the paths. + for pair in reversed(pairs): + rel, path = pair + + # Replace with the trailing slash + # '../../', 'P:/LibraryData/' + if not rel.endswith("/"): + rel += "/" + + if not path.endswith("/"): + path += "/" + + data = data.replace(rel, path) + + # Replace without the trailing slash + # '../..', 'P:/LibraryData' + if rel.endswith("/"): + rel = rel[:-1] + + if path.endswith("/"): + path = path[:-1] + + data = data.replace(rel, path) + + return data + + +def realPath(path): + """ + Return the given path eliminating any symbolic link. + + :type path: str + :rtype: str + """ + path = os.path.realpath(path) + path = os.path.expanduser(path) + return normPath(path) + + +def normPath(path): + """ + Return a normalized path containing only forward slashes. + + :type path: str + :rtype: unicode + """ + # Check and support the UNC path structure + unc = path.startswith("//") or path.startswith("\\\\") + + path = path.replace("//", "/") + path = path.replace("\\", "/") + + if path.endswith("/") and not path.endswith(":/"): + path = path.rstrip("/") + + # Make sure we retain the UNC path structure + if unc and not path.startswith("//") and path.startswith("/"): + path = "/" + path + + return path + + +def normPaths(paths): + """ + Normalize all the given paths to a consistent format. + + :type paths: list[str] + :rtype: list[str] + """ + return [normPath(path) for path in paths] + + +def splitPath(path): + """ + Split the given path into directory, basename and extension. + + Example: + print splitPath("P:/production/rigs/character/mario.ma + + # (u'P:/production/rigs/character', u'mario', u'.ma') + + :type path: str + :rtype: list[str] + """ + path = normPath(path) + filename, extension = os.path.splitext(path) + return os.path.dirname(filename), os.path.basename(filename), extension + + +def listToString(data): + """ + Return a string from the given list. + + Example: + print listToString(['apple', 'pear', 'cherry']) + + # apple,pear,cherry + + :type data: list + :rtype: str + """ + # Convert all items to string and remove 'u' + data = [str(item) for item in data] + data = str(data).replace("[", "").replace("]", "") + data = data.replace("'", "").replace('"', "") + return data + + +def stringToList(data): + """ + Return a list from the given string. + + Example: + print listToString('apple, pear, cherry') + + # ['apple', 'pear', 'cherry'] + + :type data: str + :rtype: list + """ + data = '["' + str(data) + '"]' + data = data.replace(' ', '') + data = data.replace(',', '","') + return eval(data) + + +def isVersionPath(path): + basename = path.rstrip('/').split('/')[-1] + if re.match(r'^v\d+$', basename): + return True + return False + + +def latestVersionPath(path): + version = "" + + for name in sorted(os.listdir(path), reverse=True): + if name.startswith("v"): + version = name + break + + if version: + return "{}/{}".format(path, version) + + +def listPaths(path): + """ + Return a list of paths that are in the given directory. + + :type path: str + :rtype: collections.Iterable[str] + """ + for name in os.listdir(path): + value = path + "/" + name + yield value + + +def generateUniquePath(path, attempts=1000): + """ + Generate a unique path on disc. + + Example: + # If the following files exist then the next unique path will be 3. + # C:/tmp/file.text + # C:/tmp/file (2).text + + print generateUniquePath("C:/tmp/file.text") + # C:/tmp/file (3).text + + :type path: str + :type attempts: int + :rtype: str + """ + attempt = 1 # We start at one so that the first unique name is actually 2. + dirname, name, extension = splitPath(path) + path_ = u'{dirname}/{name} ({number}){extension}' + + while os.path.exists(path): + attempt += 1 + + path = path_.format( + name=name, + number=attempt, + dirname=dirname, + extension=extension + ) + + if attempt >= attempts: + msg = u'Cannot generate unique name for path {path}' + msg = msg.format(path=path) + raise ValueError(msg) + + return path + + +def walkup(path, match=None, depth=3, sep="/"): + """ + :type path: str + :type match: func + :type depth: int + :type sep: str + :rtype: collections.Iterable[str] + """ + path = normPath(path) + + if not path.endswith(sep): + path += sep + + folders = path.split(sep) + depthCount = 0 + + for i, folder in enumerate(folders): + if not folder: + continue + + if depthCount > depth: + break + depthCount += 1 + + folder = os.path.sep.join(folders[:i*-1]) + if not os.path.isdir(folder): + continue + try: + filenames = os.listdir(folder) + except PermissionError: + continue # expected on network shares + except OSError as e: + if getattr(e, 'winerror', None) == 59: + continue # "An unexpected network error occurred" + if getattr(e, 'winerror', None) == 6: + # "The handle is invalid" - something weird on network share + continue + raise + for filename in filenames: + path = os.path.join(folder, filename) + if match is None or match(path): + yield normPath(path) + + +def timeAgo(timeStamp): + """ + Return a pretty string for how long ago the given timeStamp was. + + Example: + print timeAgo("2015-04-27 22:29:55" + # 2 years ago + + :type timeStamp: str + :rtype: str + """ + t1 = int(timeStamp) + t1 = datetime.fromtimestamp(t1) + + t2 = datetime.now() + diff = t2 - t1 + + dayDiff = diff.days + secondsDiff = diff.seconds + + if dayDiff < 0: + return '' + + if dayDiff == 0: + if secondsDiff < 10: + return "just now" + if secondsDiff < 60: + return "{:.0f} seconds ago".format(secondsDiff) + if secondsDiff < 120: + return "a minute ago" + if secondsDiff < 3600: + return "{:.0f} minutes ago".format(secondsDiff / 60) + if secondsDiff < 7200: + return "an hour ago" + if secondsDiff < 86400: + return "{:.0f} hours ago".format(secondsDiff / 3600) + + if dayDiff == 1: + return "yesterday" + + if dayDiff < 7: + return "{:.0f} days ago".format(dayDiff) + + if dayDiff < 31: + v = dayDiff / 7 + if v == 1: + return "{:.0f} week ago".format(v) + return "{:.0f} weeks ago".format(dayDiff / 7) + + if dayDiff < 365: + v = dayDiff / 30 + if v == 1: + return "{:.0f} month ago".format(v) + return "{:.0f} months ago".format(v) + + v = dayDiff / 365 + if v == 1: + return "{:.0f} year ago".format(v) + return "{:.0f} years ago".format(v) + + +def userUuid(): + """ + Return a unique uuid4 for each user. + + This does not compromise privacy as it generates a random uuid4 string + for the current user. + + :rtype: str + """ + path = os.path.join(localPath(), "settings.json") + userUuid_ = readJson(path).get("userUuid") + + if not userUuid_: + updateJson(path, {"userUuid": str(uuid.uuid4())}) + + # Read the uuid again to make sure its persistent + userUuid_ = readJson(path).get("userUuid") + + return userUuid_ + + +def showInFolder(path): + """ + Show the given path in the system file explorer. + + :type path: unicode + :rtype: None + """ + if isWindows(): + # os.system() and subprocess.call() can't pass command with + # non ascii symbols, use ShellExecuteW directly + cmd = ctypes.windll.shell32.ShellExecuteW + else: + cmd = os.system + + args = studiolibrary.config.get('showInFolderCmd') + + if args: + if isinstance(args, six.string_types): + args = [args] + + elif isLinux(): + args = [u'xdg-open "{path}"&'] + + elif isWindows(): + args = [None, u'open', u'explorer', u'/select, "{path}"', None, 1] + + elif isMac(): + args = [u'open -R "{path}"'] + + # Normalize the pathname for windows + path = os.path.normpath(path) + + for i, a in enumerate(args): + if isinstance(a, six.string_types) and '{path}' in a: + args[i] = a.format(path=path) + + logger.info("Call: '%s' with arguments: %s", cmd.__name__, args) + cmd(*args) + + +global DCC_INFO + +try: + import maya.cmds + DCC_INFO = { + "name": "maya", + "version": maya.cmds.about(q=True, version=True) + } +except Exception as error: + DCC_INFO = { + "name": "undefined", + "version": "undefined", + } + + +def osVersion(): + try: + # Fix for Windows 11 returning the wrong version + if platform.system().lower() == "windows" and platform.release() == "10" and sys.getwindowsversion().build >= 22000: + return "11" + finally: + return platform.release().replace(' ', '%20') + + +def checkForUpdates(): + """ + This function should only be used once every session unless specified by the user. + + Returns True if a newer release is found for the given platform. + + :rtype: dict + """ + if os.environ.get("STUDIO_LIBRARY_RELOADED") == "1": + return {} + + if not studiolibrary.config.get('checkForUpdatesEnabled', True): + return {} + + # In python 2.7 the getdefaultlocale function could return a None "ul" + try: + ul, _ = locale.getdefaultlocale() + ul = ul or "undefined" + ul = ul.replace("_", "-").lower() + except Exception as error: + ul = "undefined" + + try: + uid = userUuid() or "undefined" + url = "https://app.studiolibrary.com/releases?uid={uid}&v={v}&dv={dv}&dn={dn}&os={os}&ov={ov}&pv={pv}&ul={ul}" + url = url.format( + uid=uid, + v=studiolibrary.__version__, + dn=DCC_INFO.get("name").replace(' ', '%20'), + dv=DCC_INFO.get("version").replace(' ', '%20'), + os=platform.system().lower().replace(' ', '%20'), + ov=osVersion(), + pv=platform.python_version().replace(' ', '%20'), + ul=ul, + ) + + response = urllib.request.urlopen(url) + + # Check the HTTP status code + if response.getcode() == 200: + json_content = response.read().decode('utf-8') + data = json.loads(json_content) + return data + + except Exception as error: + logger.debug("Exception occurred:\n%s", traceback.format_exc()) + pass + + return {} + + +def testNormPath(): + """Test the norm path utility function. """ + + assert normPath("//win-q9lu/Library Data") == "//win-q9lu/Library Data" + + assert normPath("////win-q9lu/Library Data/") == "//win-q9lu/Library Data" + + assert normPath("\\\\win-q9l\\Library Data\\") == "//win-q9l/Library Data" + + assert normPath(r"C:\folder//Library Data/") == "C:/folder/Library Data" + + assert normPath(r"\folder//Library Data/") == "/folder/Library Data" + + assert normPath("C:\\folder//Library Data/") == "C:/folder/Library Data" + + assert normPath("\\folder//Library Data/") == "/folder/Library Data" + + assert normPath("C:/") == "C:/" + + +def testUpdate(): + """ + Test the update dictionary command + + :rtype: None + """ + testData1 = { + "../../images/beach.jpg": { + "Custom Order": "00001" + }, + "../../images/sky.jpg": { + "Custom Order": "00019", + "Other": {"Paths": "../../images/bird2.mb"} + } + } + + testData2 = { + "../../images/sky.jpg": { + "Labels": ["head", "face"], + }, + } + + expected = { + "../../images/beach.jpg": { + "Custom Order": "00001" + }, + "../../images/sky.jpg": { + "Custom Order": "00019", + "Labels": ["head", "face"], + "Other": {"Paths": "../../images/bird2.mb"} + } + } + + # Test updating/inserting a value in a dictionary. + result = update(testData1, testData2) + + msg = "Data does not match {} {}".format(expected, result) + assert expected == result, msg + + # Test the update command with an empty dictionary. + testData2 = { + "../../images/sky.jpg": {}, + } + + result = update(testData1, testData2) + + msg = "Data does not match {} {}".format(expected, result) + assert expected == result, msg + + +def testSplitPath(): + """ + Test he splitPath command. + + :rtype: None + """ + path = "P:/production/rigs/character/mario.ma" + + result = splitPath(path) + expected = (u'P:/production/rigs/character', u'mario', u'.ma') + + msg = "Data does not match {} {}".format(expected, result) + assert expected == result, msg + + +def testFormatPath(): + """ + Test the formatPath command. + + :rtype: None + """ + formatString = "{dirname}/versions/{name}{extension}" + + result = formatPath(formatString, path="P:/production/rigs/database.json") + expected = "P:/production/rigs/versions/database.json" + + msg = "Data does not match {} {}".format(expected, result) + assert expected == result, msg + + +def testRelativePaths(): + """ + Test absolute and relative paths. + + :rtype: None + """ + data = """ + { + "P:/path/head.anim": {}, + "P:/test/path/face.anim": {}, + "P:/test/relative/path/hand.anim": {}, + } + """ + + expected = """ + { + "../../../path/head.anim": {}, + "../../path/face.anim": {}, + "../path/hand.anim": {}, + } + """ + + data_ = relPath(data, "P:/test/relative/file.database") + msg = "Data does not match {} {}".format(expected, data_) + assert data_ == expected, msg + + data = """ + { + "P:/": {}, + "P:/head.anim": {}, + "P:/path/head.anim": {}, + "P:/test/path/face.anim": {}, + "P:/test/relative/path/hand.anim": {}, + } + """ + + expected = """ + { + "../../": {}, + "../../head.anim": {}, + "../../path/head.anim": {}, + "../../test/path/face.anim": {}, + "../../test/relative/path/hand.anim": {}, + } + """ + + data_ = relPath(data, "P:/.studiolibrary/database.json") + msg = "Data does not match {} {}".format(expected, data_) + assert data_ == expected, msg + + path = "P:/path/head.anim" + start = "P:/test/relative/file.database" + expected = "../../../path/head.anim" + + result = relPath(path, start) + msg = 'Data does not match "{}" "{}"'.format(result, expected) + assert result == expected, msg + + result = absPath(result, start) + msg = 'Data does not match "{}" "{}"'.format(result, path) + assert result == path, msg + + data = """ + { + "P:/LibraryData": {}, + } + """ + + expected = """ + { + "../..": {}, + } + """ + + data_ = relPath(data, "P:/LibraryData/.studiolibrary/database.json") + + print(data_) + msg = "Data does not match {} {}".format(expected, data_) + assert data_ == expected, msg + + data = """ + { + "../..": {}, + } + """ + + expected = """ + { + "P:/LibraryData": {}, + } + """ + + data_ = absPath(data, "P:/LibraryData/.studiolibrary/database.json") + + print(data_) + msg = "Data does not match {} {}".format(expected, data_) + assert data_ == expected, msg + + +def runTests(): + """Run all the tests for this file.""" + testUpdate() + testSplitPath() + testFormatPath() + testRelativePaths() + testNormPath() + + +if __name__ == "__main__": + runTests() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/PlaceholderWidget.ui b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/PlaceholderWidget.ui new file mode 100644 index 0000000..a9ab813 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/PlaceholderWidget.ui @@ -0,0 +1,95 @@ + + + Frame + + + + 0 + 0 + 229 + 639 + + + + Frame + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + + 0 + 10 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + + 96 + 96 + + + + + 96 + 96 + + + + + + + ../resource/icons/preview_placeholder.png + + + true + + + + + + + + + + + 0 + 2 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + + + diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/PreviewWidget.ui b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/PreviewWidget.ui new file mode 100644 index 0000000..1c18811 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/PreviewWidget.ui @@ -0,0 +1,300 @@ + + + Frame + + + + 0 + 0 + 160 + 479 + + + + + 160 + 0 + + + + Frame + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 2 + + + 0 + + + + + + 0 + 24 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + + + + + + + 0 + 16 + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 4 + + + 2 + + + 4 + + + 2 + + + + + + + + + 0 + 0 + + + + + 5000 + 5000 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + + + + 0 + 1 + + + + + 50 + 50 + + + + + 5000 + 5000 + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 4 + + + 2 + + + 4 + + + 2 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 15 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 4 + + + 2 + + + 4 + + + 2 + + + + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 4 + + + 4 + + + + + + 32 + 32 + + + + + 96 + 96 + + + + + 12 + 50 + false + + + + Accept + + + + + + + + + + + diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/__init__.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/__init__.py new file mode 100644 index 0000000..c72ecb9 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/__init__.py @@ -0,0 +1,37 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from .lightbox import Lightbox +from .lineedit import LineEdit +from .sortbymenu import SortByMenu +from .groupbymenu import GroupByMenu +from .filterbymenu import FilterByMenu +from .messagebox import MessageBox, createMessageBox +from .toastwidget import ToastWidget +from .searchwidget import SearchWidget +from .statuswidget import StatusWidget +from .previewwidget import PreviewWidget +from .menubarwidget import MenuBarWidget +from .sidebarwidget import SidebarWidget +from .groupboxwidget import GroupBoxWidget +from .placeholderwidget import PlaceholderWidget +from .itemswidget.item import Item +from .itemswidget.groupitem import GroupItem +from .itemswidget.itemswidget import ItemsWidget +from .themesmenu import Theme, ThemesMenu +from .librariesmenu import LibrariesMenu +from .slideraction import SliderAction +from .separatoraction import SeparatorAction +from .iconpicker import IconPickerAction, IconPickerWidget +from .colorpicker import ColorPickerAction, ColorPickerWidget +from .sequencewidget import ImageSequenceWidget +from .formwidget import FormWidget, FormDialog diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/colorpicker.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/colorpicker.py new file mode 100644 index 0000000..60beab8 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/colorpicker.py @@ -0,0 +1,408 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt + + +class ColorButton(QtWidgets.QPushButton): + + def __init__(self, *args): + QtWidgets.QPushButton.__init__(self, *args) + + self._color = None + + self.setCheckable(True) + self.setCursor(QtCore.Qt.PointingHandCursor) + + def setColor(self, color): + """ + Set the color for the button. + + :type color: QtGui.QColor + """ + self._color = color + + color = studioqt.Color.fromString(color) + + rgb = "{0},{1},{2}" + rgb = rgb.format(color.red(), color.green(), color.blue()) + + css = """ + ColorButton { + background-color: rgb(RGB); + } + + ColorButton:hover { + background-color: rgba(RGB, 220); + } + """.replace("RGB", rgb) + + self.setStyleSheet(css) + + def color(self): + """ + Get the color for the button. + + :rtype: QtGui.QColor + """ + return self._color + + +class ColorPickerAction(QtWidgets.QWidgetAction): + + def __init__(self, *args): + super(ColorPickerAction, self).__init__(*args) + + self._picker = ColorPickerWidget() + self._picker.setMouseTracking(True) + self._picker.setObjectName("colorPickerAction") + self._picker.colorChanged.connect(self._triggered) + + def picker(self): + """ + Get the picker widget instance. + + :rtype: ColorPickerWidget + """ + return self._picker + + def _triggered(self): + """Triggered when the checkbox value has changed.""" + self.trigger() + + if isinstance(self.parent().parent(), QtWidgets.QMenu): + self.parent().parent().close() + + elif isinstance(self.parent(), QtWidgets.QMenu): + self.parent().close() + + def createWidget(self, menu): + """ + This method is called by the QWidgetAction base class. + + :type menu: QtWidgets.QMenu + """ + widget = QtWidgets.QFrame(menu) + widget.setObjectName("colorPickerAction") + + actionLayout = QtWidgets.QHBoxLayout() + actionLayout.setContentsMargins(0, 0, 0, 0) + actionLayout.addWidget(self.picker(), stretch=1) + widget.setLayout(actionLayout) + + return widget + + +class ColorPickerWidget(QtWidgets.QFrame): + + COLOR_BUTTON_CLASS = ColorButton + + colorChanged = QtCore.Signal(object) + + def __init__(self, *args): + QtWidgets.QFrame.__init__(self, *args) + + self._buttons = [] + self._currentColor = None + self._browserColors = None + self._menuButton = None + + layout = QtWidgets.QHBoxLayout() + layout.setSpacing(0) + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + def enterEvent(self, event): + """ + Overriding this method to fix a bug with custom actions. + + :type event: QtCore.QEvent + """ + if self.parent(): + menu = self.parent().parent() + if isinstance(menu, QtWidgets.QMenu): + menu.setActiveAction(None) + + def _colorChanged(self, color): + """ + Triggered when the user clicks or browses for a color. + + :type color: studioqt.Color + :rtype: None + """ + self.setCurrentColor(color) + self.colorChanged.emit(color) + + def menuButton(self): + """ + Get the menu button used for browsing for custom colors. + + :rtype: QtGui.QWidget + """ + return self._menuButton + + def deleteButtons(self): + """ + Delete all the color buttons. + + :rtype: None + """ + layout = self.layout() + while layout.count(): + item = layout.takeAt(0) + item.widget().deleteLater() + + def currentColor(self): + """ + Return the current color. + + :rtype: studioqt.Color + """ + return self._currentColor + + def setCurrentColor(self, color): + """ + Set the current color. + + :type color: studioqt.Color + """ + self._currentColor = color + self.refresh() + + def refresh(self): + """Update the current state of the selected color.""" + for button in self._buttons: + button.setChecked(button.color() == self.currentColor()) + + def setColors(self, colors): + """ + Set the colors for the color bar. + + :type colors: list[str] or list[studioqt.Color] + """ + self.deleteButtons() + + first = True + last = False + + for i, color in enumerate(colors): + + if i == len(colors)-1: + last = True + + if not isinstance(color, str): + color = studioqt.Color(color) + color = color.toString() + + callback = partial(self._colorChanged, color) + + button = self.COLOR_BUTTON_CLASS(self) + + button.setObjectName('colorButton') + button.setColor(color) + + button.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + + button.setProperty("first", first) + button.setProperty("last", last) + + button.clicked.connect(callback) + + self.layout().addWidget(button) + + self._buttons.append(button) + + first = False + + self._menuButton = QtWidgets.QPushButton("...", self) + self._menuButton.setObjectName('menuButton') + self._menuButton.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + + self._menuButton.clicked.connect(self.browseColor) + self.layout().addWidget(self._menuButton) + self.refresh() + + def setBrowserColors(self, colors): + """ + :type colors: list((int,int,int)) + """ + self._browserColors = colors + + def browserColors(self): + """ + Get the colors to be displayed in the browser + + :rtype: list[studioqt.Color] + """ + return self._browserColors + + @QtCore.Slot() + def blankSlot(self): + """Blank slot to fix an issue with PySide2.QColorDialog.open()""" + pass + + def browseColor(self): + """ + Show the color dialog. + + :rtype: None + """ + color = self.currentColor() + if color: + color = studioqt.Color.fromString(color) + + d = QtWidgets.QColorDialog(self) + d.setCurrentColor(color) + + standardColors = self.browserColors() + + if standardColors: + index = -1 + for standardColor in standardColors: + index += 1 + + try: + # Support for new qt5 signature + standardColor = QtGui.QColor(standardColor) + d.setStandardColor(index, standardColor) + except: + # Support for new qt4 signature + standardColor = QtGui.QColor(standardColor).rgba() + d.setStandardColor(index, standardColor) + + d.currentColorChanged.connect(self._colorChanged) + + if d.exec_(): + self._colorChanged(d.selectedColor()) + else: + self._colorChanged(color) + + +def example(): + """ + Example: + + import studiolibrary.widgets.colorpicker + reload(studiolibrary.widgets.colorpicker) + studiolibrary.widgets.colorpicker.example() + """ + def _colorChanged(color): + print("colorChanged:", color) + + style = """ + #colorButton { + margin: 5px; + min-width: 100px; + min-height: 100px; + } + + #browseColorButton { + margin: 5px; + font-size: 45px; + min-width: 100px; + min-height: 100px; + } + """ + + colors = [ + "rgba(230, 60, 60, 255)", + "rgb(255, 90, 40)", + "rgba(255, 125, 100, 255)", + "rgba(250, 200, 0, 255)", + "rgba(80, 200, 140, 255)", + "rgba(50, 180, 240, 255)", + "rgba(110, 110, 240, 255)", + ] + + browserColors = [] + browserColors_ = [ + # Top row, Bottom row + (230, 60, 60), (250, 80, 130), + (255, 90, 40), (240, 100, 170), + (255, 125, 100), (240, 200, 150), + (250, 200, 0), (225, 200, 40), + (80, 200, 140), (80, 225, 120), + (50, 180, 240), (100, 200, 245), + (130, 110, 240), (180, 160, 255), + (180, 110, 240), (210, 110, 255) + ] + + for colorR, colorG, colorB in browserColors_: + for i in range(0, 3): + color = QtGui.QColor(colorR, colorG, colorB) + browserColors.append(color) + + picker = ColorPickerWidget() + picker.setColors(colors) + picker.setStyleSheet(style) + picker.setBrowserColors(browserColors) + picker.colorChanged.connect(_colorChanged) + picker.show() + + +def example2(): + """ + Example: + + import studiolibrary.widgets.colorpicker + reload(studiolibrary.widgets.colorpicker) + studiolibrary.widgets.colorpicker.example2() + """ + menu = QtWidgets.QMenu() + + colors = [ + "rgb(230, 60, 60)", + "rgb(255, 90, 40)", + "rgb(255, 125, 100)", + "rgb(250, 200, 0)", + "rgb(80, 200, 140)", + "rgb(50, 180, 240)", + "rgb(110, 110, 240)", + ] + + action = ColorPickerAction(menu) + action.picker().setColors(colors) + menu.addAction(action) + + colors = [ + "rgb(20, 20, 20)", + "rgb(20, 30, 40)", + "rgb(40, 40, 40)", + "rgb(40, 50, 60)", + "rgb(60, 60, 60)", + "rgb(60, 70, 80)", + "rgb(240, 240, 240)", + ] + + action = ColorPickerAction(menu) + action.picker().setColors(colors) + menu.addAction(action) + menu.addSeparator() + + menu.exec_() + + +if __name__ == "__main__": + with studioqt.app(): + example() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/fieldwidgets.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/fieldwidgets.py new file mode 100644 index 0000000..f5202d0 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/fieldwidgets.py @@ -0,0 +1,1512 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import re +import logging +import functools + +from studiovendor import six +from studiovendor.Qt import QtGui, QtCore, QtWidgets + +import studioqt + +from . import groupboxwidget +from . import colorpicker +from . import iconpicker +from . import sequencewidget + + +logger = logging.getLogger(__name__) + + +def toTitle(name): + """Convert camel case strings to title strings""" + s1 = re.sub('(.)([A-Z][a-z]+)', r'\1 \2', name) + return re.sub('([a-z0-9])([A-Z])', r'\1 \2', s1).title() + + +class FieldWidget(QtWidgets.QFrame): + + """The base widget for all field widgets. + + Examples: + + data = { + 'name': 'startFrame', + 'type': 'int' + 'value': 1, + } + + fieldWidget = FieldWidget(data) + + """ + valueChanged = QtCore.Signal() + + DefaultLayout = "horizontal" + + def __init__(self, parent=None, data=None, formWidget=None): + super(FieldWidget, self).__init__(parent) + + self._data = data or {} + self._widget = None + self._default = None + self._required = None + self._collapsed = False + self._errorLabel = None + self._menuButton = None + self._actionResult = None + self._formWidget = None + self._validateEnabled = True + + if formWidget: + self.setFormWidget(formWidget) + + self.setObjectName("fieldWidget") + + direction = self._data.get("layout", self.DefaultLayout) + + if direction == "vertical": + layout = QtWidgets.QVBoxLayout() + else: + layout = QtWidgets.QHBoxLayout() + + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + self.setLayout(layout) + + self.setContentsMargins(0, 0, 0, 0) + + self._label = QtWidgets.QLabel(self) + self._label.setObjectName('label') + self._label.setSizePolicy( + QtWidgets.QSizePolicy.Preferred, + QtWidgets.QSizePolicy.Preferred, + ) + + layout.addWidget(self._label) + + self._layout2 = QtWidgets.QHBoxLayout() + layout.addLayout(self._layout2) + + if direction == "vertical": + self._label.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) + else: + self._label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) + + widget = self.createWidget() + if widget: + self.setWidget(widget) + + + def setValidateEnabled(self, v): + self._validateEnabled = v + + def validateEnabled(self): + return self._validateEnabled + + def name(self): + """ + Get the name of field widget. + + :rtype: str + """ + return self.data()["name"] + + def defaultData(self): + """ + This is the default data used by the schema. + + :rtype: dict + """ + return {} + + def setFormWidget(self, formWidget): + """ + Set the form widget which contains the field widget. + + :type formWidget: studiolibrary.widgets.formwidget.FormWidget + """ + self._formWidget = formWidget + + def formWidget(self): + """ + Get the form widget the contains the field widget. + + :return: studiolibrary.widgets.formwidget.FormWidget + """ + return self._formWidget + + def setCollapsed(self, collapsed): + """ + Set the field widget collapsed used by the GroupFieldWidget. + + :return: studiolibrary.widgets.formwidget.FormWidget + """ + self._collapsed = collapsed + + def isCollapsed(self): + """ + Get the collapsed state of the field widget. + + :return: studiolibrary.widgets.formwidget.FormWidget + """ + return self._collapsed + + def createWidget(self): + """ + Create the widget to be used by the field. + + :rtype: QtWidgets.Widget or None + """ + return None + + def label(self): + """ + Get the label widget. + + :rtype: QtWidgets.QLabel + """ + return self._label + + def state(self): + """ + Get the current state of the data. + + :rtype: dict + """ + return { + "name": self._data["name"], + "value": self.value() + } + + def data(self): + """ + Get the data for the widget. + + :rtype: dict + """ + return self._data + + def title(self): + """ + Get the title to be displayed for the field. + + :rtype: str + """ + data = self.data() + + title = data.get("title") + if title is None: + title = data.get("name", "") + title = toTitle(title) + + if self.isRequired(): + title += '*' + + return title + + def setData(self, data): + """ + Set the current state of the field widget using a dictionary. + + :type data: dict + """ + self.blockSignals(True) + + items = data.get('items') + if items is not None: + self.setItems(items) + + value = data.get('value') + default = data.get('default') + + # Must set the default before value + if default is not None: + self.setDefault(default) + elif value is not None: + self.setDefault(value) + + if value is not None or (value and value != self.value()): + try: + self.setValue(value) + except TypeError as error: + logger.exception(error) + + enabled = data.get('enabled') + if enabled is not None: + self.setEnabled(enabled) + self._label.setEnabled(enabled) + + hidden = data.get('hidden') + if hidden is not None: + self.setHidden(hidden) + + visible = data.get('visible') + if visible is not None and not self.isCollapsed(): + self.setVisible(visible) + + required = data.get('required') + if required is not None: + self.setRequired(required) + + error = data.get('error') + if error is not None: + self.setError(error) + + value = data.get('errorVisible') + if value is not None: + self.setErrorVisible(value) + + toolTip = data.get('toolTip') + if toolTip is not None: + self.setToolTip(toolTip) + self.setStatusTip(toolTip) + + placeholder = data.get("placeholder") + if placeholder is not None: + self.setPlaceholder(placeholder) + + style = data.get("style") + if style is not None: + self.setStyleSheet(style) + + title = self.title() or "" + self.setText(title) + + label = data.get('label') + if label is not None: + + text = label.get("name") + if text is not None: + self.setText(text) + + visible = label.get('visible') + if visible is not None: + self.label().setVisible(visible) + + # Menu Items + actions = data.get('actions') + if actions is not None: + self._menuButton.setVisible(True) + + # Menu Button + menu = data.get('menu') + if menu is not None: + text = menu.get("name") + if text is not None: + self._menuButton.setText(text) + + visible = menu.get("visible", True) + self._menuButton.setVisible(visible) + + self._data.update(data) + + self.refresh() + + self.blockSignals(False) + + def setPlaceholder(self, placeholder): + """ + Set the placeholder text to be displayed for the widget. + + :type placeholder: str + :raises: NotImplementedError + """ + NotImplementedError('The method "setPlaceholder" needs to be implemented') + + def hasError(self): + """ + Check if the field contains any errors. + + :rtype: bool + """ + return bool(self.data().get("error")) + + def setErrorVisible(self, visible): + """ + Set the error message visibility. + + :type visible: bool + """ + self._data["errorVisible"] = visible + self.refreshError() + + def setError(self, message): + """ + Set the error message to be displayed for the field widget. + + :type message: str + """ + self._data["error"] = message + self.refreshError() + + def refreshError(self): + """Refresh the error message with the current data.""" + error = self.data().get("error") + + if self.hasError() and self.data().get("errorVisible", False): + self._errorLabel.setText(error) + self._errorLabel.setHidden(False) + self.setToolTip(error) + else: + self._errorLabel.setText("") + self._errorLabel.setHidden(True) + self.setToolTip(self.data().get('toolTip')) + + self.refresh() + + def setText(self, text): + """ + Set the label text for the field widget. + + :type text: str + """ + self._label.setText(text) + + def setValue(self, value): + """ + Set the value of the field widget. + + Will emit valueChanged() if the new value is different from the old one. + + :type value: object + """ + self.emitValueChanged() + + def value(self): + """ + Get the value of the field widget. + + :rtype: object + """ + raise NotImplementedError('The method "value" needs to be implemented') + + def setItems(self, items): + """ + Set the items for the field widget. + + :type items: list[str] + """ + raise NotImplementedError('The method "setItems" needs to be implemented') + + def reset(self): + """Reset the field widget back to the defaults.""" + self.setState(self._data) + + def setRequired(self, required): + """ + Set True if a value is required for this field. + + :type required: bool + """ + self._required = required + self.setProperty('required', required) + self.setStyleSheet(self.styleSheet()) + + def isRequired(self): + """ + Check if a value is required for the field widget. + + :rtype: bool + """ + return bool(self._required) + + def setDefault(self, default): + """ + Set the default value for the field widget. + + :type default: object + """ + self._default = default + + def default(self): + """ + Get the default value for the field widget. + + :rtype: object + """ + return self._default + + def isDefault(self): + """ + Check if the current value is the same as the default value. + + :rtype: bool + """ + return self.value() == self.default() + + def emitValueChanged(self, *args): + """ + Emit the value changed signal. + + :type args: list + """ + self.valueChanged.emit() + self.refresh() + + def setWidget(self, widget): + """ + Set the widget used to set and get the field value. + + :type widget: QtWidgets.QWidget + """ + widgetLayout = QtWidgets.QHBoxLayout() + widgetLayout.setContentsMargins(0, 0, 0, 0) + widgetLayout.setSpacing(0) + + self._widget = widget + self._widget.setParent(self) + self._widget.setObjectName('widget') + self._widget.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred, + ) + + self._menuButton = QtWidgets.QPushButton("...") + self._menuButton.setHidden(True) + self._menuButton.setObjectName("menuButton") + self._menuButton.clicked.connect(self._menuCallback) + self._menuButton.setSizePolicy( + QtWidgets.QSizePolicy.Preferred, + QtWidgets.QSizePolicy.Expanding, + ) + + widgetLayout.addWidget(self._widget) + widgetLayout.addWidget(self._menuButton) + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + self._errorLabel = QtWidgets.QLabel(self) + self._errorLabel.setHidden(True) + self._errorLabel.setObjectName("errorLabel") + self._errorLabel.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred, + ) + + layout.addLayout(widgetLayout) + layout.addWidget(self._errorLabel) + + self._layout2.addLayout(layout) + + def _menuCallback(self): + callback = self.data().get("menu", {}).get("callback", self.showMenu) + callback() + + def _actionCallback(self, callback): + """ + Wrap schema callback to get the return value. + + :type callback: func + """ + self._actionResult = callback() + + def showMenu(self): + """Show the menu using the actions from the data.""" + menu = QtWidgets.QMenu(self) + actions = self.data().get("actions", []) + + for action in actions: + + name = action.get("name", "No name found") + enabled = action.get("enabled", True) + callback = action.get("callback") + + func = functools.partial(self._actionCallback, callback) + + action = menu.addAction(name) + action.setEnabled(enabled) + action.triggered.connect(func) + + point = QtGui.QCursor.pos() + point.setX(point.x() + 3) + point.setY(point.y() + 3) + + # Reset the action results + self._actionResult = None + + menu.exec_(point) + + if self._actionResult is not None: + self.setValue(self._actionResult) + + def widget(self,): + """ + Get the widget used to set and get the field value. + + :rtype: QtWidgets.QWidget + """ + return self._widget + + def refresh(self): + """Refresh the style properties.""" + direction = self._data.get("layout", self.DefaultLayout) + + self.setProperty("layout", direction) + self.setProperty('default', self.isDefault()) + + if self.data().get("errorVisible", False): + self.setProperty('error', self.hasError()) + + self.setStyleSheet(self.styleSheet()) + + +class GroupFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(GroupFieldWidget, self).__init__(*args, **kwargs) + + widget = groupboxwidget.GroupBoxWidget(self.data().get("title"), None) + widget.setChecked(True) + widget.toggled.connect(self.setValue) + + self.setWidget(widget) + self.setValidateEnabled(False) + + self.label().hide() + + def defaultData(self): + """ + Get the default values for the group field. + + :rtype: dict + """ + return { + "value": True, + "persistent": True, + "validate": False, + "persistentKey": "BaseItem", + } + + def value(self): + """ + Get the value of the Group Field + + :type: bool + """ + return self.widget().isChecked() + + def setValue(self, visible): + """ + Set the value of the Group Field + + :type visible: bool + """ + self.widget().setChecked(visible) + + isChild = False + + if self.formWidget(): + for fieldWidget in self.formWidget().fieldWidgets(): + + if fieldWidget.name() == self.name(): + isChild = True + continue + + if isChild: + + if isinstance(fieldWidget, GroupFieldWidget): + break + + fieldWidget.setCollapsed(not visible) + + if visible and fieldWidget.data().get("visible") is not None: + fieldWidget.setVisible(fieldWidget.data().get("visible")) + else: + fieldWidget.setVisible(visible) + + +class Label(QtWidgets.QLabel): + + """A custom label which supports elide right.""" + + def __init__(self, *args): + super(Label, self).__init__(*args) + self._text = '' + + def setText(self, text): + """ + Overriding this method to store the original text. + + :type text: str + """ + self._text = text + QtWidgets.QLabel.setText(self, text) + + def resizeEvent(self, event): + """Overriding this method to modify the text with elided text.""" + metrics = QtGui.QFontMetrics(self.font()) + elided = metrics.elidedText(self._text, QtCore.Qt.ElideRight, self.width()) + QtWidgets.QLabel.setText(self, elided) + + +class LabelFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(LabelFieldWidget, self).__init__(*args, **kwargs) + + widget = Label(self) + widget.setAlignment(QtCore.Qt.AlignVCenter) + widget.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) + self.setWidget(widget) + self.setValidateEnabled(False) + + def value(self): + """ + Get the value of the label. + + :rtype: str + """ + return six.text_type(self.widget().text()) + + def setValue(self, value): + """ + Set the value of the label. + + :type value: str + """ + self.widget().setText(six.text_type(value)) + super(LabelFieldWidget, self).setValue(value) + + +class ObjectsFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(ObjectsFieldWidget, self).__init__(*args, **kwargs) + + self._value = [] + + widget = Label(self) + widget.setAlignment(QtCore.Qt.AlignVCenter) + widget.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) + self.setWidget(widget) + + def value(self): + """ + Get the objects + + :rtype: list[str] + """ + return self._value + + def setValue(self, value): + """ + Set the objects + + :type value: list[str] + """ + if value: + count = len(value) + plural = "s" if count > 1 else "" + + msg = "{0} object{1} selected for saving" + msg = msg.format(str(count), plural) + else: + msg = "Nothing selected for saving" + + self._value = value + self.widget().setText(msg) + super(ObjectsFieldWidget, self).setValue(value) + + +class StringFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(StringFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QLineEdit(self) + widget.textChanged.connect(self.emitValueChanged) + self.setWidget(widget) + + def value(self): + """ + Get the value of the widget. + + :rtype: unicode + """ + return six.text_type(self.widget().text()) + + def setValue(self, value): + """ + Set the string value for the widget. + + :type value: unicode + """ + pos = self.widget().cursorPosition() + + self.widget().blockSignals(True) + try: + self.widget().setText(value) + finally: + self.widget().blockSignals(False) + + self.widget().setCursorPosition(pos) + + super(StringFieldWidget, self).setValue(value) + + +class PathFieldWidget(StringFieldWidget): + def __init__(self, *args, **kwargs): + super(PathFieldWidget, self).__init__(*args, **kwargs) + + def setData(self, data): + """ + Overriding this method to add a browse to folder button. + + :type data: dict + """ + if "menu" not in data: + data["menu"] = { + "callback": self.browse + } + + super(PathFieldWidget, self).setData(data) + + def browse(self): + """Open the file dialog.""" + path = self.value() + path = QtWidgets.QFileDialog.getExistingDirectory( + None, + "Browse Folder", + path + ) + if path: + self.setValue(path) + + +class TextFieldWidget(FieldWidget): + + DefaultLayout = "Vertical" + + def __init__(self, *args, **kwargs): + super(TextFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QTextEdit(self) + widget.textChanged.connect(self.emitValueChanged) + self.setWidget(widget) + + def value(self): + """ + Get the text value of the text edit. + + :rtype: unicode + """ + return six.text_type(self.widget().toPlainText()) + + def setValue(self, value): + """ + Set the text value for the text edit. + + :type value: unicode + """ + self.widget().setText(value) + super(TextFieldWidget, self).setValue(value) + + +class IntFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(IntFieldWidget, self).__init__(*args, **kwargs) + + validator = QtGui.QIntValidator(-50000000, 50000000, self) + + widget = QtWidgets.QLineEdit(self) + widget.setValidator(validator) + widget.textChanged.connect(self.emitValueChanged) + self.setWidget(widget) + + def value(self): + """ + Get the int value for the widget. + + :rtype: int + """ + value = self.widget().text() + if value.strip() == "": + value = self.default() + + if value == "-": + value = 0 + + return int(str(value)) + + def setValue(self, value): + """ + Set the int value for the widget. + + :type value: int + """ + if value == '': + value = self.default() + + self.widget().setText(str(int(value))) + + +class BoolFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(BoolFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QCheckBox(self) + widget.stateChanged.connect(self.emitValueChanged) + + self.setWidget(widget) + + def setText(self, text): + """ + Overriding this method to add support for the inline key. + + :type text: str + """ + inline = self.data().get("inline") + if inline: + self.label().setText("") + self.widget().setText(text) + else: + super(BoolFieldWidget, self).setText(text) + + def value(self): + """ + Get the value of the checkbox. + + :rtype: bool + """ + return bool(self.widget().isChecked()) + + def setValue(self, value): + """ + Set the value of the checkbox. + + :type value: bool + """ + self.widget().setChecked(value) + super(BoolFieldWidget, self).setValue(value) + + +class RangeFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(RangeFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QFrame(self) + layout = QtWidgets.QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(4) + widget.setLayout(layout) + + validator = QtGui.QIntValidator(-50000000, 50000000, self) + + self._minwidget = QtWidgets.QLineEdit(self) + self._minwidget.setValidator(validator) + self._minwidget.textChanged.connect(self.emitValueChanged) + widget.layout().addWidget(self._minwidget) + + self._maxwidget = QtWidgets.QLineEdit(self) + self._maxwidget.setValidator(validator) + self._maxwidget.textChanged.connect(self.emitValueChanged) + widget.layout().addWidget(self._maxwidget) + + self.setWidget(widget) + + def value(self): + """ + Get the current range. + + :rtype: list[int] + """ + min = int(float(self._minwidget.text() or "0")) + max = int(float(self._maxwidget.text() or "0")) + + return min, max + + def setValue(self, value): + """ + Set the current range. + + :type value: list[int] + """ + minValue, maxValue = int(value[0]), int(value[1]) + + self._minwidget.setText(str(minValue)) + self._maxwidget.setText(str(maxValue)) + + super(RangeFieldWidget, self).setValue(value) + + +class StringDoubleFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(StringDoubleFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QFrame(self) + layout = QtWidgets.QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(4) + widget.setLayout(layout) + + self._widget1 = QtWidgets.QLineEdit(self) + self._widget1.textChanged.connect(self.emitValueChanged) + widget.layout().addWidget(self._widget1) + + self._widget2 = QtWidgets.QLineEdit(self) + self._widget2.textChanged.connect(self.emitValueChanged) + widget.layout().addWidget(self._widget2) + + self.setWidget(widget) + + def setPlaceholder(self, value): + """ + Overriding this method to add support for passing a lists or tuple + + :type value: str or list or tuple + """ + if isinstance(value, list) or isinstance(value, tuple): + if len(value) >= 1: + self._widget1.setPlaceholderText(value[0]) + + if len(value) >= 2: + self._widget2.setPlaceholderText(value[1]) + else: + self._widget1.setPlaceholderText(str(value)) + + def value(self): + """ + Get the current string double value. + + :rtype: (str, str) + """ + value1 = self._widget1.text() or "" + value2 = self._widget2.text() or "" + + return value1, value2 + + def setValue(self, value): + """ + Set the current string double value. + + :type value: (str, str) + """ + value1, value2 = value[0], value[1] + + self._widget1.setText(str(value1)) + self._widget2.setText(str(value2)) + + super(StringDoubleFieldWidget, self).setValue(value) + + +class EnumFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(EnumFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QComboBox(self) + widget.currentIndexChanged.connect(self.emitValueChanged) + + self.setWidget(widget) + + def value(self): + """ + Get the value of the combobox. + + :rtype: unicode + """ + return six.text_type(self.widget().currentText()) + + def setState(self, state): + """ + Set the current state with support for editable. + + :type state: dict + """ + super(EnumFieldWidget, self).setState(state) + + editable = state.get('editable') + if editable is not None: + self.widget().setEditable(editable) + + def setValue(self, item): + """ + Set the current value of the combobox. + + :type item: unicode + """ + self.setCurrentText(item) + + def setCurrentText(self, text): + """ + This method supports Qt4 and Qt5 when settings the current text. + + :type text: str + """ + index = self.widget().findText(text, QtCore.Qt.MatchExactly) + if index != -1: + self.widget().setCurrentIndex(index) + else: + msg = 'Cannot set the current text to "{0}" for the field "{1}".' + msg = msg.format(text, self.name()) + logger.warning(msg) + + def setItems(self, items): + """ + Set the current items of the combobox. + + :type items: list[unicode] + """ + self.widget().clear() + self.widget().addItems(items) + + +class TagsFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(TagsFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QComboBox(self) + widget.setEditable(True) + widget.editTextChanged.connect(self.emitValueChanged) + widget.currentIndexChanged.connect(self.emitValueChanged) + + self.setWidget(widget) + + def listToString(self, data): + """ + Return a string from the given list. + + Example: + print listToString(['apple', 'pear', 'cherry']) + + # apple,pear,cherry + + :type data: list + :rtype: str + """ + # Convert all items to string and remove 'u' + data = [str(item) for item in data] + data = str(data).replace("[", "").replace("]", "") + data = data.replace("'", "").replace('"', "") + return data + + def stringToList(self, data): + """ + Return a list from the given string. + + Example: + print listToString('apple, pear, cherry') + + # ['apple', 'pear', 'cherry'] + + :type data: str + :rtype: list + """ + data = '["' + str(data) + '"]' + data = data.replace(' ', '') + data = data.replace(',', '","') + return eval(data) + + def value(self): + """ + Get the value of the combobox. + + :rtype: list[str] + """ + return self.stringToList(self.widget().currentText()) + + def setValue(self, value): + """ + Set the current value of the combobox. + + :type value: list[str] + """ + text = self.listToString(value) + self.widget().setEditText(text) + + def setItems(self, items): + """ + Set the current items of the combobox. + + :type items: list[unicode] + """ + self.widget().clear() + self.widget().addItems(items) + + +class RadioFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(RadioFieldWidget, self).__init__(*args, **kwargs) + + self._radioButtons = [] + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + + self._radioFrame = QtWidgets.QFrame(self) + self._radioFrame.setLayout(layout) + + self.setWidget(self._radioFrame) + + self.label().setStyleSheet("margin-top:2px;") + self.widget().setStyleSheet("margin-top:2px;") + + self.label().setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTop) + + def value(self): + """ + Get the text of checked radio button. + + :return: str + """ + for radioButton in self._radioButtons: + if radioButton.isChecked(): + return radioButton.text() + return "" + + def setValue(self, value): + """ + Set the radio button checked with the given text. + + :type: str + """ + for radioButton in self._radioButtons: + checked = radioButton.text() == value + radioButton.setChecked(checked) + + def clear(self): + """Destroy all the radio buttons.""" + for radioButton in self._radioButtons: + radioButton.destroy() + radioButton.close() + radioButton.hide() + + def setItems(self, items): + """ + Set the items used to create the radio buttons. + + items: list[str] + """ + self.clear() + + for item in items: + widget = QtWidgets.QRadioButton(self) + widget.clicked.connect(self.emitValueChanged) + widget.setText(item) + + self._radioButtons.append(widget) + self._radioFrame.layout().addWidget(widget) + + +class ButtonGroupFieldWidget(FieldWidget): + """A simple button group field.""" + + def __init__(self, *args, **kwargs): + super(ButtonGroupFieldWidget, self).__init__(*args, **kwargs) + + self._value = "" + self._buttons = {} + + items = self.data().get('items') + + widget = QtWidgets.QFrame() + layout = QtWidgets.QHBoxLayout() + layout.setSpacing(0) + layout.setContentsMargins(0, 0, 0, 0) + widget.setLayout(layout) + + i = 0 + for item in items: + i += 1 + + button = QtWidgets.QPushButton(item, self) + button.setCheckable(True) + + callback = functools.partial(self.setValue, item) + button.clicked.connect(callback) + + self._buttons[item] = button + + if i == 1: + button.setProperty('first', True) + + if i == len(items): + button.setProperty('last', True) + + widget.layout().addWidget(button) + + self.setWidget(widget) + + def setItems(self, items): + """Overriding this method to avoid the not implemented error.""" + pass + + def setValue(self, value): + """ + Set the current value. + + :type value: str + """ + self._value = value + + self.blockSignals(True) + + for button in self._buttons.values(): + button.setChecked(False) + + if value in self._buttons: + self._buttons[value].setChecked(True) + + self.blockSignals(False) + + super(ButtonGroupFieldWidget, self).setValue(value) + + def value(self): + """ + Get the current value. + + :rtype: str + """ + return self._value + + +class SeparatorFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(SeparatorFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QLabel(self) + widget.setObjectName('widget') + widget.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + + self.setWidget(widget) + + if not self.data().get("title"): + self.label().hide() + + def setValue(self, value): + """ + Set the current text of the separator. + + :type value: unicode + """ + self.widget().setText(value) + + def value(self): + """ + Get the current text of the separator. + + :rtype: unicode + """ + return self.widget().text() + + +class SliderFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(SliderFieldWidget, self).__init__(*args, **kwargs) + + widget = QtWidgets.QSlider(self) + widget.setOrientation(QtCore.Qt.Horizontal) + widget.setObjectName('widget') + widget.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + widget.valueChanged.connect(self.emitValueChanged) + + self.setWidget(widget) + + def setValue(self, value): + """ + Set the current value for the slider. + + :type value: int + """ + self.widget().setValue(value) + + def value(self): + """ + Get the current value for the slider. + + :rtype: int + """ + return self.widget().value() + + +class ColorFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(ColorFieldWidget, self).__init__(*args, **kwargs) + + self._value = "rgb(100,100,100)" + + widget = colorpicker.ColorPickerWidget() + widget.setObjectName('widget') + widget.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + widget.colorChanged.connect(self._colorChanged) + self.setWidget(widget) + + def setData(self, data): + """ + Overriding this method to add support for a "colors" key. + + :type data: dict + """ + colors = data.get("colors") + if colors: + self.widget().setColors(colors) + + super(ColorFieldWidget, self).setData(data) + + def _colorChanged(self, color): + """ + Triggered when the color changes from the color browser. + + :type color: QtGui.QColor + """ + if isinstance(color, QtGui.QColor): + color = studioqt.Color(color).toString() + + self.setValue(color) + self.emitValueChanged() + + def setItems(self, items): + self.widget().setColors(items) + + def setValue(self, value): + """ + Set the current value for the slider. + + :type value: str + """ + self.widget().setCurrentColor(value) + + def value(self): + """ + Get the current value for the slider. + + :rtype: str + """ + return self.widget().currentColor() + + +class IconPickerFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(IconPickerFieldWidget, self).__init__(*args, **kwargs) + + widget = iconpicker.IconPickerWidget(self) + widget.setObjectName('widget') + widget.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + widget.iconChanged.connect(self._iconChanged) + self.setWidget(widget) + + def _iconChanged(self, icon): + """ + Triggered when the color changes from the color browser. + + :type icon: QtGui.QColor + """ + self.setValue(icon) + self.emitValueChanged() + + def setValue(self, value): + """ + Set the current value for the slider. + + :type value: str + """ + self.widget().setCurrentIcon(value) + + def setItems(self, items): + """ + Set the icons to be displayed in the picker. + + :type items: str + """ + self.widget().setIcons(items) + self.widget().menuButton().setVisible(False) + + def value(self): + """ + Get the current value for the slider. + + :rtype: str + """ + return self.widget().currentIcon() + + +class ImageFieldWidget(FieldWidget): + + def __init__(self, *args, **kwargs): + super(ImageFieldWidget, self).__init__(*args, **kwargs) + + self._value = "" + self._pixmap = None + + widget = QtWidgets.QLabel(self) + self.setStyleSheet("min-height: 32px;") + widget.setScaledContents(False) + widget.setObjectName('widget') + widget.setAlignment(QtCore.Qt.AlignHCenter) + + self.setWidget(widget) + self.layout().addStretch() + + def setValue(self, value): + """ + Set the path on disc for the image. + + :type value: str + """ + self._value = value + self._pixmap = QtGui.QPixmap(value) + self.update() + + def value(self): + """ + Get the path on disc for the image. + + :rtype: str + """ + return self._value + + def resizeEvent(self, event): + """ + Called when the field widget is resizing. + + :type event: QtCore.QEvent + """ + self.update() + + def update(self): + """Update the image depending on the size.""" + if self._pixmap: + width = self.widget().height() + transformation = QtCore.Qt.SmoothTransformation + + if self.widget().width() > self.widget().height(): + pixmap = self._pixmap.scaledToWidth(width, transformation) + else: + pixmap = self._pixmap.scaledToHeight(width, transformation) + + self.widget().setPixmap(pixmap) + self.widget().setAlignment(QtCore.Qt.AlignLeft) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/filterbymenu.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/filterbymenu.py new file mode 100644 index 0000000..49f1202 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/filterbymenu.py @@ -0,0 +1,310 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt + +from .separatoraction import SeparatorAction + + +NEW_STYLE = True + + +class LabelAction(QtWidgets.QWidgetAction): + + def _triggered(self, checked=None): + """Triggered when the checkbox value has changed.""" + self.triggered.emit() + self.parent().close() + + def createWidget(self, menu): + """ + This method is called by the QWidgetAction base class. + + :type menu: QtWidgets.QMenu + """ + widget = QtWidgets.QFrame(self.parent()) + widget.setObjectName("filterByAction") + + title = self._name + + # Using a checkbox so that the text aligns with the other actions + label = QtWidgets.QCheckBox(widget) + label.setText(title) + label.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents) + label.toggled.connect(self._triggered) + label.setStyleSheet(""" +#QCheckBox::indicator:checked { + image: url(none.png) +} +QCheckBox::indicator:unchecked { + image: url(none.png) +} +""") + actionLayout = QtWidgets.QHBoxLayout() + actionLayout.setContentsMargins(0, 0, 0, 0) + actionLayout.addWidget(label, stretch=1) + widget.setLayout(actionLayout) + + return widget + + +class FilterByAction(QtWidgets.QWidgetAction): + + def __init__(self, parent=None): + """ + :type parent: QtWidgets.QMenu + """ + QtWidgets.QWidgetAction.__init__(self, parent) + + self._facet = None + self._checked = False + + def setChecked(self, checked): + self._checked = checked + + def setFacet(self, facet): + self._facet = facet + + def _triggered(self, checked=None): + """Triggered when the checkbox value has changed.""" + self.triggered.emit() + self.parent().close() + + def createWidget(self, menu): + """ + This method is called by the QWidgetAction base class. + + :type menu: QtWidgets.QMenu + """ + widget = QtWidgets.QFrame(self.parent()) + widget.setObjectName("filterByAction") + + facet = self._facet + + name = facet.get("name") or "" + count = str(facet.get("count", 0)) + + title = name.replace(".", "").title() + + label = QtWidgets.QCheckBox(widget) + label.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents) + label.setText(title) + label.installEventFilter(self) + label.toggled.connect(self._triggered) + label.setChecked(self._checked) + + label2 = QtWidgets.QLabel(widget) + label2.setObjectName("actionCounter") + label2.setText(count) + + layout = QtWidgets.QHBoxLayout() + layout.setSpacing(0) + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(label, stretch=1) + layout.addWidget(label2) + widget.setLayout(layout) + + return widget + + +class FilterByMenu(QtWidgets.QMenu): + + def __init__(self, *args, **kwargs): + super(FilterByMenu, self).__init__(*args, **kwargs) + + self._facets = [] + self._dataset = None + self._options = {"field": "type"} + self._settings = {} + + def name(self): + """ + The name of the filter used by the dataset. + + :rtype: str + """ + return self._options.get("field") + "FilterMenu" + + def _actionChecked(self, name, checked): + """ + Triggered when an action has been clicked. + + :type name: str + :type checked: bool + """ + if studioqt.isControlModifier(): + self.setAllEnabled(False) + self._settings[name] = True + else: + self._settings[name] = checked + + self.dataset().search() + + def _showAllClicked(self): + """Triggered when the user clicks the show all action.""" + self.setAllEnabled(True) + self.dataset().search() + + def setAllEnabled(self, enabled): + """ + Set all the filters enabled. + + :type enabled: bool + """ + for facet in self._facets: + self._settings[facet.get("name")] = enabled + + def isShowAllEnabled(self): + """ + Check if all the current filters are enabled. + + :rtype: bool + """ + for facet in self._facets: + if not self._settings.get(facet.get("name"), True): + return False + return True + + def isActive(self): + """ + Check if there are any filters currently active using the settings. + + :rtype: bool + """ + settings = self.settings() + for name in settings: + if not settings.get(name): + return True + return False + + def setOptions(self, options): + """ + Set the options to be used by the filters menu. + + :type options: dict + """ + self._options = options + + def dataset(self): + """ + Get the dataset model for the menu. + + :rtype: studiolibrary.Dataset + """ + return self._dataset + + def settings(self): + """ + Get the settings for the filter menu. + + :rtype: dict + """ + return self._settings + + def setSettings(self, settings): + """ + Set the settings filter menu. + + :type settings: dict + """ + self._settings = settings + + def setDataset(self, dataset): + """ + Set the dataset model for the menu: + + :type dataset: studiolibrary.Dataset + """ + self._dataset = dataset + dataset.searchStarted.connect(self.searchInit) + + def searchInit(self): + """Triggered before each search to update the filter menu query.""" + filters = [] + + settings = self.settings() + field = self._options.get("field") + + for name in settings: + checked = settings.get(name, True) + if not checked: + filters.append((field, "not", name)) + + query = { + "name": self.name(), + "operator": "and", + "filters": filters + } + + self.dataset().addQuery(query) + + def show(self, point=None): + """ + Show the menu options. + + :type point: QtGui.QPoint or None + """ + self.clear() + + field = self._options.get("field") + queries = self.dataset().queries(exclude=self.name()) + + self._facets = self.dataset().distinct(field, queries=queries) + + action = SeparatorAction("Show " + field.title(), self) + self.addAction(action) + + if NEW_STYLE: + action = LabelAction(self) + action._name = "Show All" + self.addAction(action) + else: + action = self.addAction("Show All") + + action.setEnabled(not self.isShowAllEnabled()) + callback = partial(self._showAllClicked) + action.triggered.connect(callback) + + self.addSeparator() + + for facet in self._facets: + + name = facet.get("name") or "" + count = facet.get("count", 0) + checked = self.settings().get(name, True) + + title = "{name}\t({count})" + title = title.format(name=name.replace(".", "").title(), count=count) + + if NEW_STYLE: + action = FilterByAction(self) + action.setFacet(facet) + action.setChecked(checked) + self.addAction(action) + else: + action = self.addAction(title) + action.setCheckable(True) + action.setChecked(checked) + + callback = partial(self._actionChecked, name, not checked) + action.triggered.connect(callback) + + if not point: + point = QtGui.QCursor.pos() + + self.exec_(point) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/formwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/formwidget.py new file mode 100644 index 0000000..11f28b0 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/formwidget.py @@ -0,0 +1,785 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import re +import logging +import functools + +from studiovendor.Qt import QtGui, QtCore, QtWidgets + +from . import settings +from . import fieldwidgets + + +__all__ = [ + "FormWidget", + "FormDialog", + "FIELD_WIDGET_REGISTRY" +] + + +logger = logging.getLogger(__name__) + + +FIELD_WIDGET_REGISTRY = { + "int": fieldwidgets.IntFieldWidget, + "bool": fieldwidgets.BoolFieldWidget, + "enum": fieldwidgets.EnumFieldWidget, + "text": fieldwidgets.TextFieldWidget, + "path": fieldwidgets.PathFieldWidget, + "tags": fieldwidgets.TagsFieldWidget, + "image": fieldwidgets.ImageFieldWidget, + "label": fieldwidgets.LabelFieldWidget, + "range": fieldwidgets.RangeFieldWidget, + "color": fieldwidgets.ColorFieldWidget, + "group": fieldwidgets.GroupFieldWidget, + "string": fieldwidgets.StringFieldWidget, + "radio": fieldwidgets.RadioFieldWidget, + "stringDouble": fieldwidgets.StringDoubleFieldWidget, + "slider": fieldwidgets.SliderFieldWidget, + "objects": fieldwidgets.ObjectsFieldWidget, + "separator": fieldwidgets.SeparatorFieldWidget, + "iconPicker": fieldwidgets.IconPickerFieldWidget, + "buttonGroup": fieldwidgets.ButtonGroupFieldWidget, +} + + +def toTitle(name): + """Convert camel case strings to title strings""" + s1 = re.sub("(.)([A-Z][a-z]+)", r"\1 \2", name) + return re.sub("([a-z0-9])([A-Z])", r"\1 \2", s1).title() + + +class FormWidget(QtWidgets.QFrame): + + accepted = QtCore.Signal(object) + stateChanged = QtCore.Signal() + validated = QtCore.Signal() + + def __init__(self, *args, **kwargs): + super(FormWidget, self).__init__(*args, **kwargs) + + self._schema = [] + self._widgets = [] + self._validator = None + self._validatorEnabled = True + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + self.setLayout(layout) + + self._fieldsFrame = QtWidgets.QFrame(self) + self._fieldsFrame.setObjectName("optionsFrame") + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + self._fieldsFrame.setLayout(layout) + + self._titleWidget = QtWidgets.QPushButton(self) + self._titleWidget.setCheckable(True) + self._titleWidget.setObjectName("titleWidget") + self._titleWidget.toggled.connect(self._titleClicked) + self._titleWidget.hide() + + self.layout().addWidget(self._titleWidget) + self.layout().addWidget(self._fieldsFrame) + + def _titleClicked(self, toggle): + """Triggered when the user clicks the title widget.""" + self.setExpanded(toggle) + self.stateChanged.emit() + + def titleWidget(self): + """ + Get the title widget. + + :rtype: QWidget + """ + return self._titleWidget + + def setTitle(self, title): + """ + Set the text for the title widget. + + :type title: str + """ + self.titleWidget().setText(title) + + def setExpanded(self, expand): + """ + Expands the options if expand is true, otherwise collapses the options. + + :type expand: bool + """ + self._titleWidget.blockSignals(True) + + try: + self._titleWidget.setChecked(expand) + self._fieldsFrame.setVisible(expand) + finally: + self._titleWidget.blockSignals(False) + + def isExpanded(self): + """ + Returns true if the item is expanded, otherwise returns false. + + :rtype: bool + """ + return self._titleWidget.isChecked() + + def setTitleVisible(self, visible): + """ + A convenience method for setting the title visible. + + :type visible: bool + """ + self.titleWidget().setVisible(visible) + + def reset(self): + """Reset all option widgets back to their default value.""" + for widget in self._widgets: + widget.reset() + self.validate() + + def savePersistentValues(self): + """ + Triggered when the user changes the options. + """ + data = {} + + for widget in self._widgets: + name = widget.data().get("name") + if name and widget.data().get("persistent"): + + key = self.objectName() or "FormWidget" + key = widget.data().get("persistentKey", key) + + data.setdefault(key, {}) + data[key][name] = widget.value() + + for key in data: + settings.set(key, data[key]) + + def loadPersistentValues(self): + """ + Get the options from the user settings. + + :rtype: dict + """ + values = {} + defaultValues = self.defaultValues() + + for field in self.schema(): + name = field.get("name") + persistent = field.get("persistent") + + if persistent: + key = self.objectName() or "FormWidget" + key = field.get("persistentKey", key) + value = settings.get(key, {}).get(name) + else: + value = defaultValues.get(name) + + if value is not None: + values[name] = value + + self.setValues(values) + + def schema(self): + """ + Get the schema for the form. + + :rtype: dict + """ + return self._schema + + def _sortSchema(self, schema): + """ + Sort the schema depending on the group order. + + :type schema: list[dict] + :rtype: list[dict] + """ + order = 0 + + for i, field in enumerate(schema): + if field.get("type") == "group": + order = field.get("order", order) + field["order"] = order + + def _key(field): + return field["order"] + + return sorted(schema, key=_key) + + def setSchema(self, schema, layout=None, errorsVisible=False): + """ + Set the schema for the widget. + + :type schema: list[dict] + :type layout: None or str + :type errorsVisible: bool + """ + self._schema = self._sortSchema(schema) + + for field in self._schema: + + cls = FIELD_WIDGET_REGISTRY.get(field.get("type", "label")) + + if not cls: + logger.warning("Cannot find widget for %s", field) + continue + + if layout and not field.get("layout"): + field["layout"] = layout + + errorVisible = field.get("errorVisible") + if errorVisible is not None: + field["errorVisible"] = errorVisible + else: + field["errorVisible"] = errorsVisible + + widget = cls(data=field, parent=self._fieldsFrame, formWidget=self) + + data_ = widget.defaultData() + data_.update(field) + + widget.setData(data_) + + value = field.get("value") + default = field.get("default") + if value is None and default is not None: + widget.setValue(default) + + self._widgets.append(widget) + + callback = functools.partial(self._fieldChanged, widget) + widget.valueChanged.connect(callback) + + self._fieldsFrame.layout().addWidget(widget) + + self.loadPersistentValues() + + def _fieldChanged(self, widget): + """ + Triggered when the given option widget changes value. + + :type widget: FieldWidget + """ + self.validate(widget=widget) + + def accept(self): + """Accept the current options""" + self.emitAcceptedCallback() + self.savePersistentValues() + + def closeEvent(self, event): + """Called when the widget is closed.""" + self.savePersistentValues() + super(FormWidget, self).closeEvent(event) + + def errors(self): + """ + Get all the errors. + + :rtype: list[str] + """ + errors = [] + for widget in self._widgets: + error = widget.data().get("error") + if error: + errors.append(error) + return errors + + def hasErrors(self): + """ + Return True if the form contains any errors. + + :rtype: bool + """ + return bool(self.errors()) + + def setValidatorEnabled(self, enabled): + self._validatorEnabled = enabled + + def setValidator(self, validator): + """ + Set the validator for the options. + + :type validator: func + """ + self._validator = validator + + def validator(self): + """ + Return the validator for the form. + + :rtype: func + """ + return self._validator + + def validate(self, widget=None): + """Validate the current options using the validator.""" + + if self._validator and self._validatorEnabled: + + logger.debug("Running validator: form.validate(widget=%s)", widget) + + values = {} + + for name, value in self.values().items(): + data = self.widget(name).data() + if data.get("validate", True): + values[name] = value + + if widget: + values["fieldChanged"] = widget.name() + + fields = self._validator(**values) + if fields is not None: + self._setState(fields) + + self.validated.emit() + + else: + logger.debug("No validator set.") + + def setData(self, name, data): + """ + Set the data for the given field name. + + :type name: str + :type data: dict + """ + widget = self.widget(name) + widget.setData(data) + + def setValue(self, name, value): + """ + Set the value for the given field name and value + + :type name: str + :type value: object + """ + widget = self.widget(name) + widget.setValue(value) + + def value(self, name): + """ + Get the value for the given widget name. + + :type name: str + :rtype: object + """ + widget = self.widget(name) + return widget.value() + + def widget(self, name): + """ + Get the widget for the given widget name. + + :type name: str + :rtype: FieldWidget + """ + for widget in self._widgets: + if widget.data().get("name") == name: + return widget + + def fields(self): + """ + Get all the field data for the form. + + :rtype: dict + """ + fields = [] + for widget in self._widgets: + fields.append(widget.data()) + return fields + + def fieldWidgets(self): + """ + Get all the field widgets. + + :rtype: list[FieldWidget] + """ + return self._widgets + + def setValues(self, values): + """ + Set the field values for the current form. + + :type values: dict + """ + state = [] + for name in values: + state.append({"name": name, "value": values[name]}) + self._setState(state) + + def values(self): + """ + Get the all the field values indexed by the field name. + + :rtype: dict + """ + values = {} + for widget in self._widgets: + name = widget.data().get("name") + if name and widget.validateEnabled(): + values[name] = widget.value() + return values + + def defaultValues(self): + """ + Get the all the default field values indexed by the field name. + + :rtype: dict + """ + values = {} + for widget in self._widgets: + name = widget.data().get("name") + if name: + values[name] = widget.default() + return values + + def state(self): + """ + Get the current state. + + :rtype: dict + """ + fields = [] + + for widget in self._widgets: + fields.append(widget.state()) + + state = { + "fields": fields, + "expanded": self.isExpanded() + } + + return state + + def setState(self, state): + """ + Set the current state. + + :type state: dict + """ + expanded = state.get("expanded") + if expanded is not None: + self.setExpanded(expanded) + + fields = state.get("fields") + if fields is not None: + self._setState(fields) + + self.validate() + + def _setState(self, fields): + """ + Set the state while blocking all signals. + + :type fields: list[dict] + """ + for widget in self._widgets: + widget.blockSignals(True) + + for widget in self._widgets: + widget.setError("") + for field in fields: + if field.get("name") == widget.data().get("name"): + widget.setData(field) + + for widget in self._widgets: + widget.blockSignals(False) + + self.stateChanged.emit() + + +class FormDialog(QtWidgets.QFrame): + + accepted = QtCore.Signal(object) + rejected = QtCore.Signal(object) + + def __init__(self, parent=None, form=None): + super(FormDialog, self).__init__(parent) + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + self.setLayout(layout) + + self._widgets = [] + self._validator = None + + self._title = QtWidgets.QLabel(self) + self._title.setObjectName('title') + self._title.setText('FORM') + self.layout().addWidget(self._title) + + self._description = QtWidgets.QLabel(self) + self._description.setObjectName('description') + self.layout().addWidget(self._description) + + self._formWidget = FormWidget(self) + self._formWidget.setObjectName("formWidget") + self._formWidget.validated.connect(self._validated) + self.layout().addWidget(self._formWidget) + + self.layout().addStretch(1) + + buttonLayout = QtWidgets.QHBoxLayout() + buttonLayout.setContentsMargins(0, 0, 0, 0) + buttonLayout.setSpacing(0) + + self.layout().addLayout(buttonLayout) + + buttonLayout.addStretch(1) + + self._acceptButton = QtWidgets.QPushButton(self) + self._acceptButton.setObjectName('acceptButton') + self._acceptButton.setText('Submit') + self._acceptButton.clicked.connect(self.accept) + + self._rejectButton = QtWidgets.QPushButton(self) + self._rejectButton.setObjectName('rejectButton') + self._rejectButton.setText('Cancel') + self._rejectButton.clicked.connect(self.reject) + + buttonLayout.addWidget(self._acceptButton) + buttonLayout.addWidget(self._rejectButton) + + if form: + self.setSettings(form) + # buttonLayout.addStretch(1) + + def _validated(self): + """Triggered when the form has been validated""" + self._acceptButton.setEnabled(not self._formWidget.hasErrors()) + + def acceptButton(self): + """ + Return the accept button. + + :rtype: QWidgets.QPushButton + """ + return self._acceptButton + + def rejectButton(self): + """ + Return the reject button. + + :rtype: QWidgets.QPushButton + """ + return self._rejectButton + + def validateAccepted(self, **kwargs): + """ + Triggered when the accept button has been clicked. + + :type kwargs: The values of the fields + """ + self._formWidget.validator()(**kwargs) + + def validateRejected(self, **kwargs): + """ + Triggered when the reject button has been clicked. + + :type kwargs: The default values of the fields + """ + self._formWidget.validator()(**kwargs) + + def setSettings(self, settings): + + self._settings = settings + + title = settings.get("title") + if title is not None: + self._title.setText(title) + + callback = settings.get("accepted") + if not callback: + self._settings["accepted"] = self.validateAccepted + + callback = settings.get("rejected") + if not callback: + self._settings["rejected"] = self.validateRejected + + description = settings.get("description") + if description is not None: + self._description.setText(description) + + validator = settings.get("validator") + if validator is not None: + self._formWidget.setValidator(validator) + + layout = settings.get("layout") + + schema = settings.get("schema") + if schema is not None: + self._formWidget.setSchema(schema, layout=layout) + + def accept(self): + """Call this method to accept the dialog.""" + callback = self._settings.get("accepted") + if callback: + callback(**self._formWidget.values()) + self.close() + + def reject(self): + """Call this method to rejected the dialog.""" + callback = self._settings.get("rejected") + if callback: + callback(**self._formWidget.defaultValues()) + self.close() + + +STYLE = """ + +FormWidget QWidget { + /*font-size: 12px;*/ + text-align: left; +} + +FieldWidget { + min-height: 16px; + margin-bottom: 3px; +} + +FieldWidget[layout=vertical] #label { + margin-bottom: 4px; +} + +FieldWidget[layout=horizontal] #label { + margin-left: 4px; +} + +FieldWidget #menuButton { + margin-left: 4px; + border-radius: 2px; + min-width: 25px; + max-height: 25px; + text-align: center; + background-color: rgba(0,0,0,20); +} + +FieldWidget #label { + min-width: 72px; + color: rgba(FOREGROUND_COLOR_R, FOREGROUND_COLOR_G, FOREGROUND_COLOR_B, 100); +} + +FormWidget #titleWidget { + font-size: 12px; + padding: 2px; + padding-left: 5px; + background-color: rgba(255, 255, 255, 20); + border-bottom: 0px solid rgba(255, 255, 255, 20); +} + +FormWidget #titleWidget:checked { + background-color: rgba(255, 255, 255, 5); +} + +FormWidget #optionsFrame { + margin: 2px; +} + +FieldWidget QComboBox { + border: 1px solid transparent; +} +""" + + +def example(): + """ + import studiolibrary + studiolibrary.reload() + + import studiolibrary + studiolibrary.widgets.formwidget.example() + """ + import studiolibrary + image = studiolibrary.resource.get("icons", "icon.png") + + schema = [ + { + "name": "name", + "value": "Face.anim", + "type": "string", + }, + { + "name": "objects", + "value": "125 objects", + "type": "label", + }, + { + "name": "sep1", + "type": "separator", + }, + { + "name": "color", + "type": "color", + }, + { + "name": "blend", + "type": "slider", + }, + { + "name": "Bake", + "type": "bool", + }, + { + "name": "image", + "type": "image", + "value": image + }, + { + "name": "frameRange", + "type": "range" + }, + { + "name": "option", + "type": "enum", + "items": ["Test1", "Test2", "Test4"] + }, + { + "name": "comment", + "value": "this is a comment", + "type": "text", + "layout": "vertical" + }, + ] + + def validator(**fields): + print(fields) + + w = FormWidget() + w.setValidator(validator) + w.setSchema(schema) + w.setStyleSheet(STYLE) + w.show() + + return w + + +if __name__ == "__main__": + import studioqt + with studioqt.app(): + w = example() + + + diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/groupboxwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/groupboxwidget.py new file mode 100644 index 0000000..179c703 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/groupboxwidget.py @@ -0,0 +1,150 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging + +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +from . import settings + +import studioqt +import studiolibrary + + +logger = logging.getLogger(__name__) + + +class GroupBoxWidget(QtWidgets.QFrame): + + toggled = QtCore.Signal(bool) + + def __init__(self, title, widget, persistent=False, *args, **kwargs): + super(GroupBoxWidget, self).__init__(*args, **kwargs) + + self._widget = None + self._persistent = None + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + self.setLayout(layout) + + self._titleWidget = QtWidgets.QPushButton(self) + self._titleWidget.setCheckable(True) + self._titleWidget.setText(title) + self._titleWidget.setObjectName("title") + self._titleWidget.toggled.connect(self._toggled) + + on_path = studiolibrary.resource.get("icons", "caret-down.svg") + off_path = studiolibrary.resource.get("icons", "caret-right.svg") + icon = studioqt.Icon.fa(on_path, color="rgba(255,255,255,200)", off=off_path) + self._titleWidget.setIcon(icon) + + self.layout().addWidget(self._titleWidget) + + self._widgetFrame = QtWidgets.QFrame(self) + self._widgetFrame.setObjectName("frame") + + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + self._widgetFrame.setLayout(layout) + + self.layout().addWidget(self._widgetFrame) + + if widget: + self.setWidget(widget) + + self.setPersistent(persistent) + + def setPersistent(self, persistent): + """ + Save and load the state of the widget to disk. + + :type persistent: bool + """ + self._persistent = persistent + self.loadSettings() + + def title(self): + """ + Get the title for the group box. + + :rtype: str + """ + return self._titleWidget.text() + + def setWidget(self, widget): + """ + Set the widget to hide when the user clicks the title. + + :type widget: QWidgets.QWidget + """ + self._widget = widget + # self._widget.setParent(self._widgetFrame) + # self._widgetFrame.layout().addWidget(self._widget) + + def _toggled(self, visible): + """ + Triggered when the user clicks the title. + + :type visible: bool + """ + self.saveSettings() + self.setChecked(visible) + self.toggled.emit(visible) + + def isChecked(self): + """ + Check the checked state for the group box. + + :rtype: bool + """ + return self._titleWidget.isChecked() + + def setChecked(self, checked): + """ + Overriding this method to hide the widget when the state changes. + + :type checked: bool + """ + self._titleWidget.setChecked(checked) + if self._widget: + self._widget.setVisible(checked) + + def saveSettings(self): + """Save the state to disc.""" + if self._persistent: + + if not self.objectName(): + raise NameError("No object name set for persistent widget.") + + data = {self.objectName(): {"checked": self.isChecked()}} + settings.save(data) + + def loadSettings(self): + """Load the state to disc.""" + if self._persistent: + + if not self.objectName(): + raise NameError("No object name set for persistent widget.") + + data = settings.read() + data = data.get(self.objectName(), {}) + + if isinstance(data, dict): + checked = data.get("checked", True) + self.setChecked(checked) + diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/groupbymenu.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/groupbymenu.py new file mode 100644 index 0000000..4f52c78 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/groupbymenu.py @@ -0,0 +1,121 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtWidgets + +from .separatoraction import SeparatorAction + + +class GroupByMenu(QtWidgets.QMenu): + + def __init__(self, name, parent, dataset): + super(GroupByMenu, self).__init__(name, parent) + + self._dataset = dataset + self.aboutToShow.connect(self.populateMenu) + + def setDataset(self, dataset): + """ + Set the dataset model for the menu: + + :type dataset: studiolibrary.Dataset + """ + self._dataset = dataset + + def dataset(self): + """ + Get the dataset model for the menu. + + :rtype: studiolibrary.Dataset + """ + return self._dataset + + def setGroupBy(self, groupName, groupOrder): + """ + Set the group by value for the dataset. + + :type groupName: str + :type groupOrder: str + """ + if groupName: + value = [groupName + ":" + groupOrder] + else: + value = None + + self.dataset().setGroupBy(value) + self.dataset().search() + + def populateMenu(self): + """ + Show the menu options. + """ + self.clear() + + groupBy = self.dataset().groupBy() + if groupBy: + currentField = groupBy[0].split(":")[0] + currentOrder = "dsc" if "dsc" in groupBy[0] else "asc" + else: + currentField = "" + currentOrder = "" + + action = SeparatorAction("Group By", self) + self.addAction(action) + + action = self.addAction("None") + action.setCheckable(True) + + if not currentField: + action.setChecked(True) + + callback = partial(self.setGroupBy, None, None) + action.triggered.connect(callback) + + fields = self.dataset().fields() + + for field in fields: + + if not field.get("groupable"): + continue + + name = field.get("name") + + action = self.addAction(name.title()) + action.setCheckable(True) + + if currentField == name: + action.setChecked(True) + else: + action.setChecked(False) + + callback = partial(self.setGroupBy, name, currentOrder) + action.triggered.connect(callback) + + action = SeparatorAction("Group Order", self) + self.addAction(action) + + action = self.addAction("Ascending") + action.setCheckable(True) + action.setChecked(currentOrder == "asc") + + callback = partial(self.setGroupBy, currentField, "asc") + action.triggered.connect(callback) + + action = self.addAction("Descending") + action.setCheckable(True) + action.setChecked(currentOrder == "dsc") + + callback = partial(self.setGroupBy, currentField, "dsc") + action.triggered.connect(callback) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/iconpicker.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/iconpicker.py new file mode 100644 index 0000000..fa0f54a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/iconpicker.py @@ -0,0 +1,324 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from functools import partial + +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt + +from studiolibrary import resource + + +class IconButton(QtWidgets.QToolButton): + + def __init__(self, *args): + super(IconButton, self).__init__(*args) + + self.setObjectName('iconButton') + + self._iconPath = None + + self.setCheckable(True) + self.setCursor(QtCore.Qt.PointingHandCursor) + + def setIconPath(self, path): + """ + Set the path for the button. + + :type path: str + """ + self._iconPath = path + self.updateIcon() + + def updateIcon(self): + + self.setToolTip(self._iconPath) + self.setStatusTip(self._iconPath) + + color = self.palette().color(self.foregroundRole()) + color = studioqt.Color.fromColor(color) + + icon = resource.icon(self._iconPath, color=color) + self.setIcon(icon) + + def iconPath(self): + """ + Get the color for the button. + + :rtype: str + """ + return self._iconPath + + +class IconPickerAction(QtWidgets.QWidgetAction): + + def __init__(self, *args): + super(IconPickerAction, self).__init__(*args) + + self._picker = IconPickerWidget() + self._picker.setMouseTracking(True) + self._picker.setObjectName("iconPickerAction") + self._picker.iconChanged.connect(self._triggered) + + def picker(self): + """ + Get the picker widget instance. + + :rtype: IconPickerWidget + """ + return self._picker + + def _triggered(self): + """Triggered when the checkbox value has changed.""" + self.trigger() + + if isinstance(self.parent().parent(), QtWidgets.QMenu): + self.parent().parent().close() + + elif isinstance(self.parent(), QtWidgets.QMenu): + self.parent().close() + + def createWidget(self, menu): + """ + This method is called by the QWidgetAction base class. + + :type menu: QtWidgets.QMenu + """ + widget = QtWidgets.QFrame(menu) + widget.setObjectName("iconPickerAction") + + self.picker().setParent(widget) + + actionLayout = QtWidgets.QHBoxLayout() + actionLayout.setContentsMargins(0, 0, 0, 0) + actionLayout.addWidget(self.picker(), stretch=1) + widget.setLayout(actionLayout) + + return widget + + +class IconPickerWidget(QtWidgets.QFrame): + + BUTTON_CLASS = IconButton + + iconChanged = QtCore.Signal(object) + + def __init__(self, *args): + QtWidgets.QFrame.__init__(self, *args) + + self._buttons = [] + self._currentIcon = None + self._menuButton = None + + layout = QtWidgets.QGridLayout() + layout.setSpacing(0) + layout.setContentsMargins(0, 0, 0, 0) + self.setLayout(layout) + + def enterEvent(self, event): + """ + Overriding this method to fix a bug with custom actions. + + :type event: QtCore.QEvent + """ + if self.parent(): + menu = self.parent().parent() + if isinstance(menu, QtWidgets.QMenu): + menu.setActiveAction(None) + + def _iconChanged(self, iconPath): + """ + Triggered when the user clicks or browses for a color. + + :type iconPath: str + :rtype: None + """ + self.setCurrentIcon(iconPath) + self.iconChanged.emit(iconPath) + + def menuButton(self): + """ + Get the menu button used for browsing for custom colors. + + :rtype: QtGui.QWidget + """ + return self._menuButton + + def deleteButtons(self): + """ + Delete all the color buttons. + + :rtype: None + """ + layout = self.layout() + while layout.count(): + item = layout.takeAt(0) + item.widget().deleteLater() + + def currentIcon(self): + """ + Return the current color. + + :rtype: studioqt.Color + """ + return self._currentIcon + + def setCurrentIcon(self, color): + """ + Set the current color. + + :type color: studioqt.Color + """ + self._currentIcon = color + self.refresh() + + def refresh(self): + """Update the current state of the selected color.""" + for button in self._buttons: + button.setChecked(button.iconPath() == self.currentIcon()) + + def updateTheme(self): + for button in self._buttons: + button.updateIcon() + + def setIcons(self, icons): + """ + Set the colors for the color bar. + + :type icons: list[str] or list[studioqt.Icon] + """ + self.deleteButtons() + + i = 0 + first = True + last = False + + positions = [(i, j) for i in range(5) for j in range(5)] + for position, iconPath in zip(positions, icons): + i += 1 + + if i == len(icons) - 1: + last = True + + callback = partial(self._iconChanged, iconPath) + + button = self.BUTTON_CLASS(self) + button.setIconPath(iconPath) + # button.setIconSize(QtCore.QSize(16, 16)) + + button.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + + button.setProperty("first", first) + button.setProperty("last", last) + + button.clicked.connect(callback) + + self.layout().addWidget(button, *position) + + self._buttons.append(button) + + first = False + + self._menuButton = QtWidgets.QPushButton("...", self) + self._menuButton.setObjectName('menuButton') + self._menuButton.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + + self._menuButton.clicked.connect(self.browseColor) + self.layout().addWidget(self._menuButton) + + self.refresh() + self.updateTheme() + + @QtCore.Slot() + def blankSlot(self): + """Blank slot to fix an issue with PySide2.QColorDialog.open()""" + pass + + def browseColor(self): + """ + Show the color dialog. + + :rtype: None + """ + pass + # color = self.currentColor() + # if color: + # color = studioqt.Color.fromString(color) + # + # d = QtWidgets.QColorDialog(self) + # d.setCurrentColor(color) + # + # d.currentColorChanged.connect(self._colorChanged) + # + # if d.exec_(): + # self._colorChanged(d.selectedColor()) + # else: + # self._colorChanged(color) + + +def example(): + """ + Example: + + import studiolibrary.widgets.colorpicker + reload(studiolibrary.widgets.colorpicker) + studiolibrary.widgets.colorpicker.example() + """ + + def _iconChanged(icon): + print("iconChanged:", icon) + + style = """ + #iconButton { + margin: 2px; + min-width: 18px; + min-height: 18px; + background-color: rgba(0,0,0,0); + } + """ + + from studiolibrary import resource + + icons = [] + names = [ + "folder.svg", + "user.svg", + "character.svg", + "users.svg", + "inbox.svg", + "favorite.svg", + "shot.svg", + "asset.svg", + "assets.svg", + ] + + for name in names: + icons.append(resource.icon(name, color="rgb(255,255,255)")) + + picker = IconPickerWidget() + picker.setStyleSheet(style) + picker.setIcons(icons) + picker.iconChanged.connect(_iconChanged) + picker.show() + + +if __name__ == "__main__": + with studioqt.app(): + example() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/__init__.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/__init__.py new file mode 100644 index 0000000..fa43df4 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/__init__.py @@ -0,0 +1,11 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/groupitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/groupitem.py new file mode 100644 index 0000000..6ee2d3b --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/groupitem.py @@ -0,0 +1,216 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +from .item import Item + + +class GroupItem(Item): + + DEFAULT_FONT_SIZE = 18 + PADDING_LEFT = 2 + PADDING_RIGHT = 20 + HEIGHT = 28 + + def __init__(self, *args): + super(GroupItem, self).__init__(*args) + + self._children = [] + + self._font = self.font(0) + self._font.setBold(True) + + self.setFont(0, self._font) + self.setFont(1, self._font) + self.setDragEnabled(False) + + def setChildren(self, children): + """ + Set the children for the group. + + :type children: list[Item] + :rtype: None + """ + self._children = children + + def children(self): + """ + Return the children for the group. + + :rtype: list[Item] + """ + return self._children + + def childrenHidden(self): + """ + Return True if all children are hidden. + + :rtype: bool + """ + for child in self.children(): + if not child.isHidden(): + return False + return True + + def updateChildren(self): + """ + Update the visibility if all children are hidden. + + :rtype: bool + """ + if self.childrenHidden(): + self.setHidden(True) + else: + self.setHidden(False) + + def textAlignment(self, column): + """ + Return the font alignment for the given column. + + :type column: int + """ + return QtWidgets.QTreeWidgetItem.textAlignment(self, column) + + def sizeHint(self, column=0): + """ + Return the size of the item. + + :rtype: QtCore.QSize + """ + padding = self.PADDING_RIGHT * self.dpi() + width = self.itemsWidget().width() - padding + return QtCore.QSize(width, self.HEIGHT * self.dpi()) + + def visualRect(self, option): + """ + Return the visual rect for the item. + + :type option: QtWidgets.QStyleOptionViewItem + :rtype: QtCore.QRect + """ + rect = QtCore.QRect(option.rect) + rect.setX(self.PADDING_LEFT * self.dpi()) + rect.setWidth(self.sizeHint().width()) + return rect + + def isTextVisible(self): + """ + Return True if the text is visible. + + :rtype: bool + """ + return True + + def textSelectedColor(self): + """ + Return the selected text color for the item. + + :rtype: QtWidgets.QtColor + """ + return self.itemsWidget().textColor() + + def backgroundColor(self): + """ + Return the background color for the item. + + :rtype: QtWidgets.QtColor + """ + return QtGui.QColor(0, 0, 0, 0) + + def backgroundHoverColor(self): + """ + Return the background color when the mouse is over the item. + + :rtype: QtWidgets.QtColor + """ + return QtGui.QColor(0, 0, 0, 0) + + def backgroundSelectedColor(self): + """ + Return the background color when the item is selected. + + :rtype: QtWidgets.QtColor + """ + return QtGui.QColor(0, 0, 0, 0) + + def paintRow(self, painter, option, index): + """ + Paint performs low-level painting for the item. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :type index: QtCore.QModelIndex + :rtype: None + """ + self.setRect(QtCore.QRect(option.rect)) + + painter.save() + + try: + self.paintBackground(painter, option, index) + + if self.isTextVisible(): + self._paintText(painter, option, 1) + + finally: + painter.restore() + + def isLabelOverItem(self): + """Overriding this method to ignore this feature for group items.""" + return False + + def isLabelUnderItem(self): + """Overriding this method to ignore this feature for group items.""" + return False + + def icon(self, *args): + """ + Overriding the icon method, so that an icon is not displayed. + """ + return None + + def paintBackground(self, painter, option, index): + """ + Draw the background for the item. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :type index: QtCore.QModelIndex + :rtype: None + """ + super(GroupItem, self).paintBackground(painter, option, index) + + painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) + visualRect = self.visualRect(option) + + text = self.name() + metrics = QtGui.QFontMetricsF(self._font) + textWidth = metrics.boundingRect(text).width() + + padding = (25 * self.dpi()) + + visualRect.setX(textWidth + padding) + visualRect.setY(visualRect.y() + (visualRect.height() / 2)) + visualRect.setHeight(2 * self.dpi()) + visualRect.setWidth(visualRect.width() - padding) + + color = QtGui.QColor( + self.textColor().red(), + self.textColor().green(), + self.textColor().blue(), 10 + ) + painter.setBrush(QtGui.QBrush(color)) + + painter.drawRect(visualRect) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/item.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/item.py new file mode 100644 index 0000000..f040023 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/item.py @@ -0,0 +1,1513 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import math +import logging + +from studiovendor import six +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary + + +logger = logging.getLogger(__name__) + + +class GlobalSignals(QtCore.QObject): + """""" + sliderChanged = QtCore.Signal(float) + + +class WorkerSignals(QtCore.QObject): + triggered = QtCore.Signal(object) + + +class LabelDisplayOption: + + Hide = "hide label" + Over = "label over item" + Under = "label under item" + + @staticmethod + def values(): + return [ + LabelDisplayOption.Hide, + LabelDisplayOption.Over, + LabelDisplayOption.Under, + ] + + +class ImageWorker(QtCore.QRunnable): + """A convenience class for loading an image in a thread.""" + + def __init__(self, *args): + QtCore.QRunnable.__init__(self, *args) + + self._path = None + self.signals = WorkerSignals() + + def setPath(self, path): + """ + Set the image path to be processed. + + :type path: str + """ + self._path = path + + def run(self): + """The starting point for the thread.""" + try: + if self._path: + image = QtGui.QImage(six.text_type(self._path)) + self.signals.triggered.emit(image) + except Exception as error: + logger.exception("Cannot load thumbnail image.") + + +class Item(QtWidgets.QTreeWidgetItem): + """The Item is used to hold rows of information for an item view.""" + + ICON_PATH = None + TYPE_ICON_PATH = None + + ThreadPool = QtCore.QThreadPool() + THUMBNAIL_PATH = "" + + MAX_ICON_SIZE = 256 + + DEFAULT_FONT_SIZE = 12 + DEFAULT_PLAYHEAD_COLOR = QtGui.QColor(255, 255, 255, 220) + + THUMBNAIL_COLUMN = 0 + ENABLE_THUMBNAIL_THREAD = True + PAINT_SLIDER = False + + _TYPE_PIXMAP_CACHE = {} + + _globalSignals = GlobalSignals() + sliderChanged = _globalSignals.sliderChanged + + def __init__(self, *args): + QtWidgets.QTreeWidgetItem.__init__(self, *args) + + self._url = None + self._path = None + self._size = None + self._rect = None + self._textColumnOrder = [] + + self._data = {} + self._itemData = {} + + self._icon = {} + self._fonts = {} + self._thread = None + self._pixmap = {} + self._pixmapRect = None + self._pixmapScaled = None + + self._iconPath = None + self._typePixmap = None + + self._thumbnailIcon = None + + self._underMouse = False + self._searchText = None + self._infoWidget = None + + self._groupItem = None + self._groupColumn = 0 + + self._mimeText = None + self._itemsWidget = None + self._stretchToWidget = None + + self._dragEnabled = True + + self._imageSequence = None + self._imageSequencePath = "" + + self._sliderDown = False + self._sliderValue = 0.0 + self._sliderPreviousValue = 0.0 + self._sliderPosition = None + self._sliderEnabled = False + + self._worker = ImageWorker() + self._worker.setAutoDelete(False) + self._worker.signals.triggered.connect(self._thumbnailFromImage) + self._workerStarted = False + + def __eq__(self, other): + return id(other) == id(self) + + def __ne__(self, other): + return id(other) != id(self) + + def __hash__(self): + return hash(id(self)) + + def __del__(self): + """ + Make sure the sequence is stopped when deleted. + + :rtype: None + """ + self.stop() + + def columnFromLabel(self, label): + if self.treeWidget(): + return self.treeWidget().columnFromLabel(label) + else: + return None + + def labelFromColumn(self, column): + if self.treeWidget(): + return self.treeWidget().labelFromColumn(column) + else: + return None + + def mimeText(self): + """ + Return the mime text for drag and drop. + + :rtype: str + """ + return self._mimeText or self.text(0) + + def setMimeText(self, text): + """ + Set the mime text for drag and drop. + + :type text: str + :rtype: None + """ + self._mimeText = text + + def setHidden(self, value): + """ + Set the item hidden. + + :type value: bool + :rtype: None + """ + QtWidgets.QTreeWidgetItem.setHidden(self, value) + row = self.treeWidget().indexFromItem(self).row() + self.itemsWidget().listView().setRowHidden(row, value) + + def setDragEnabled(self, value): + """ + Set True if the item can be dragged. + + :type value: bool + :rtype: None + """ + self._dragEnabled = value + + def dragEnabled(self): + """ + Return True if the item can be dragged. + + :rtype: bool + """ + return self._dragEnabled + + def setIcon(self, column, icon, color=None): + """ + Set the icon to be displayed in the given column. + + :type column: int or str + :type icon: QtGui.QIcon + :type color: QtGui.QColor or None + :rtype: None + """ + # Safe guard for when the class is being used without the gui. + isAppRunning = bool(QtWidgets.QApplication.instance()) + if not isAppRunning: + return + + if isinstance(icon, six.string_types): + if not os.path.exists(icon): + color = color or studioqt.Color(255, 255, 255, 20) + icon = studiolibrary.resource.icon("image", color=color) + else: + icon = QtGui.QIcon(icon) + + if isinstance(column, six.string_types): + self._icon[column] = icon + else: + self._pixmap[column] = None + QtWidgets.QTreeWidgetItem.setIcon(self, column, icon) + + self.updateIcon() + + def setItemData(self, data): + """ + Set the given dictionary as the data for the item. + + :type data: dict + :rtype: None + """ + self._itemData = data + + def itemData(self): + """ + Return the item data for this item. + + :rtype: dict + """ + return self._itemData + + def setName(self, text): + """ + Set the name that is shown under the icon and in the Name column. + + :type text: str + :rtype: None + """ + itemData = self.itemData() + itemData['icon'] = text + itemData['name'] = text + + def name(self): + """ + Return text for the Name column. + + :rtype: str + """ + return self.itemData().get("name") + + def displayText(self, label): + """ + Return the sort data for the given column. + + :type label: str + :rtype: str + """ + return six.text_type(self.itemData().get(label, '')) + + def sortText(self, label): + """ + Return the sort data for the given column. + + :type label: str + :rtype: str + """ + return six.text_type(self.itemData().get(label, '')) + + def update(self): + """ + Refresh the visual state of the icon. + + :rtype: None + """ + self.updateIcon() + self.updateFrame() + + def updateIcon(self): + """ + Clear the pixmap cache for the item. + + :rtype: None + """ + self.clearCache() + + def clearCache(self): + """Clear the thumbnail cache.""" + self._pixmap = {} + self._pixmapRect = None + self._pixmapScaled = None + self._thumbnailIcon = None + + def dpi(self): + """ + Used for high resolution devices. + + :rtype: int + """ + if self.itemsWidget(): + return self.itemsWidget().dpi() + else: + return 1 + + def clicked(self): + """ + Triggered when an item is clicked. + + :rtype: None + """ + pass + + def takeFromTree(self): + """ + Takes this item from the tree. + """ + tree = self.treeWidget() + parent = self.parent() + + if parent: + parent.takeChild(parent.indexOfChild(self)) + else: + tree.takeTopLevelItem(tree.indexOfTopLevelItem(self)) + + def selectionChanged(self): + """ + Triggered when an item has been either selected or deselected. + + :rtype: None + """ + self.resetSlider() + + def doubleClicked(self): + """ + Triggered when an item is double clicked. + + :rtype: None + """ + pass + + def setGroupItem(self, groupItem): + """ + Set the group item that this item is a child to. + + :type groupItem: groupitem.GroupItem + """ + self._groupItem = groupItem + + def groupItem(self): + """ + Get the group item that this item is a child to. + + :rtype: groupitem.GroupItem + """ + return self._groupItem + + def itemsWidget(self): + """ + Returns the items widget that contains the items. + + :rtype: ItemsWidget + """ + itemsWidget = None + + if self.treeWidget(): + itemsWidget = self.treeWidget().parent() + + return itemsWidget + + def url(self): + """ + Return the url object for the given item. + + :rtype: QtCore.QUrl or None + """ + if not self._url: + self._url = QtCore.QUrl(self.text(0)) + return self._url + + def setUrl(self, url): + """ + Set the url object for the item. + + :type: QtCore.QUrl or None + :rtype: None + """ + self._url = url + + def searchText(self): + """ + Return the search string used for finding the item. + + :rtype: str + """ + if not self._searchText: + self._searchText = six.text_type(self._data) + + return self._searchText + + def setStretchToWidget(self, widget): + """ + Set the width of the item to the width of the given widget. + + :type widget: QtWidgets.QWidget + :rtype: None + """ + self._stretchToWidget = widget + + def stretchToWidget(self): + """ + Return the sretchToWidget. + + :rtype: QtWidgets.QWidget + """ + return self._stretchToWidget + + def setSize(self, size): + """ + Set the size for the item. + + :type size: QtCore.QSize + :rtype: None + """ + self._size = size + + def sizeHint(self, column=0): + """ + Return the current size of the item. + + :type column: int + :rtype: QtCore.QSize + """ + if self.stretchToWidget(): + if self._size: + size = self._size + else: + size = self.itemsWidget().iconSize() + + w = self.stretchToWidget().width() + h = size.height() + return QtCore.QSize(w - 20, h) + + if self._size: + return self._size + else: + iconSize = self.itemsWidget().iconSize() + + if self.isLabelUnderItem(): + w = iconSize.width() + h = iconSize.width() + self.textHeight() + iconSize = QtCore.QSize(w, h) + + return iconSize + + def setPixmap(self, column, pixmap): + """ + Set the pixmap to be displayed in the given column. + + :type column: int + :type pixmap: QtWidgets.QPixmap + :rtype: None + """ + self._pixmap[column] = pixmap + + def thumbnailPath(self): + """ + Return the thumbnail path on disk. + + :rtype: None or str + """ + return "" + + def _thumbnailFromImage(self, image): + """ + Called after the given image object has finished loading. + + :type image: QtGui.QImage + :rtype: None + """ + self.clearCache() + + pixmap = QtGui.QPixmap() + pixmap.convertFromImage(image) + icon = QtGui.QIcon(pixmap) + + self._thumbnailIcon = icon + if self.itemsWidget(): + self.itemsWidget().update() + + def defaultThumbnailPath(self): + """ + Get the default thumbnail path. + + :rtype: str + """ + return self.THUMBNAIL_PATH + + def defaultThumbnailIcon(self): + """ + Get the default thumbnail icon. + + :rtype: QtGui.QIcon + """ + return QtGui.QIcon(self.defaultThumbnailPath()) + + def thumbnailIcon(self): + """ + Return the thumbnail icon. + + :rtype: QtGui.QIcon + """ + thumbnailPath = self.thumbnailPath() + + if not self._thumbnailIcon: + if self.ENABLE_THUMBNAIL_THREAD and not self._workerStarted: + self._workerStarted = True + self._worker.setPath(thumbnailPath) + + self.ThreadPool.start(self._worker) + + self._thumbnailIcon = self.defaultThumbnailIcon() + else: + self._thumbnailIcon = QtGui.QIcon(thumbnailPath) + + return self._thumbnailIcon + + def icon(self, column): + """ + Overriding the icon method to add support for the thumbnail icon. + + :type column: int + :rtype: QtGui.QIcon + """ + icon = QtWidgets.QTreeWidgetItem.icon(self, column) + + if not icon and column == self.THUMBNAIL_COLUMN: + icon = self.thumbnailIcon() + + return icon + + def pixmap(self, column): + """ + Return the pixmap for the given column. + + :type column: int + :rtype: QtWidgets.QPixmap + """ + + if not self._pixmap.get(column): + + icon = self.icon(column) + if icon: + size = QtCore.QSize(self.MAX_ICON_SIZE, self.MAX_ICON_SIZE) + iconSize = icon.actualSize(size) + self._pixmap[column] = icon.pixmap(iconSize) + + return self._pixmap.get(column) + + def padding(self): + """ + Return the padding/border size for the item. + + :rtype: int + """ + return self.itemsWidget().padding() + + def textHeight(self): + """ + Return the height of the text for the item. + + :rtype: int + """ + return self.itemsWidget().itemTextHeight() + + def isTextVisible(self): + """ + Check if the label should be displayed. + + :rtype: bool + """ + return self.labelDisplayOption() != LabelDisplayOption.Hide + + def isLabelOverItem(self): + """ + Check if the label should be displayed over the item. + + :rtype: bool + """ + return self.labelDisplayOption() == LabelDisplayOption.Over + + def isLabelUnderItem(self): + """ + Check if the label should be displayed under the item. + + :rtype: bool + """ + return self.labelDisplayOption() == LabelDisplayOption.Under + + def labelDisplayOption(self): + """ + Return True if the text is visible. + + :rtype: bool + """ + return self.itemsWidget().labelDisplayOption() + + def textAlignment(self, column): + """ + Return the text alignment for the label in the given column. + + :type column: int + :rtype: QtCore.Qt.AlignmentFlag + """ + if self.itemsWidget().isIconView(): + return QtCore.Qt.AlignCenter + else: + return QtWidgets.QTreeWidgetItem.textAlignment(self, column) + + # ----------------------------------------------------------------------- + # Support for mouse and key events + # ----------------------------------------------------------------------- + + def underMouse(self): + """Return True if the item is under the mouse cursor.""" + return self._underMouse + + def contextMenu(self, menu): + """ + Return the context menu for the item. + + Reimplement in a subclass to return a custom context menu for the item. + + :rtype: QtWidgets.QMenu + """ + pass + + def dropEvent(self, event): + """ + Reimplement in a subclass to receive drop events for the item. + + :type event: QtWidgets.QDropEvent + :rtype: None + """ + + def mouseLeaveEvent(self, event): + """ + Reimplement in a subclass to receive mouse leave events for the item. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + self._underMouse = False + self.stop() + + def mouseEnterEvent(self, event): + """ + Reimplement in a subclass to receive mouse enter events for the item. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + self._underMouse = True + self.play() + + def mouseMoveEvent(self, event): + """ + Reimplement in a subclass to receive mouse move events for the item. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + self.sliderEvent(event) + self.imageSequenceEvent(event) + + def mousePressEvent(self, event): + """ + Reimplement in a subclass to receive mouse press events for the item. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + if event.button() == QtCore.Qt.MiddleButton: + if self.isSliderEnabled(): + self.setSliderDown(True) + self._sliderPosition = event.pos() + + def mouseReleaseEvent(self, event): + """ + Reimplement in a subclass to receive mouse release events for the item. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + if self.isSliderDown(): + self._sliderPreviousValue = self.sliderValue() + self._sliderPosition = None + + self.treeWidget()._itemSliderReleased(self, self.sliderValue()) + self.setSliderDown(False) + + def keyPressEvent(self, event): + """ + Reimplement in a subclass to receive key press events for the item. + + :type event: QtWidgets.QKeyEvent + :rtype: None + """ + pass + + def keyReleaseEvent(self, event): + """ + Reimplement in a subclass to receive key release events for the item. + + :type event: QtWidgets.QKeyEvent + :rtype: None + """ + pass + + # ----------------------------------------------------------------------- + # Support for custom painting + # ----------------------------------------------------------------------- + + def textColor(self): + """ + Return the text color for the item. + + :rtype: QtWidgets.QtColor + """ + # This will be changed to use the palette soon. + # Note: There were problems with older versions of Qt's palette (Maya 2014). + # Eg: + # return self.itemsWidget().palette().color(self.itemsWidget().foregroundRole()) + return self.itemsWidget().textColor() + + def textSelectedColor(self): + """ + Return the selected text color for the item. + + :rtype: QtWidgets.QtColor + """ + return self.itemsWidget().textSelectedColor() + + def backgroundColor(self): + """ + Return the background color for the item. + + :rtype: QtWidgets.QtColor + """ + return self.itemsWidget().itemBackgroundColor() + + def backgroundHoverColor(self): + """ + Return the background color when the mouse is over the item. + + :rtype: QtWidgets.QtColor + """ + return self.itemsWidget().backgroundHoverColor() + + def backgroundSelectedColor(self): + """ + Return the background color when the item is selected. + + :rtype: QtWidgets.QtColor + """ + return self.itemsWidget().backgroundSelectedColor() + + def rect(self): + """ + Return the rect for the current paint frame. + + :rtype: QtCore.QRect + """ + return self._rect + + def setRect(self, rect): + """ + Set the rect for the current paint frame. + + :type rect: QtCore.QRect + :rtype: None + """ + self._rect = rect + + def visualRect(self, option): + """ + Return the visual rect for the item. + + :type option: QtWidgets.QStyleOptionViewItem + :rtype: QtCore.QRect + """ + return QtCore.QRect(option.rect) + + def paintRow(self, painter, option, index): + """ + Paint performs low-level painting for the item. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :type index: QtCore.QModelIndex + :rtype: None + """ + QtWidgets.QTreeWidget.drawRow( + self.treeWidget(), + painter, + option, + index + ) + + def paint(self, painter, option, index): + """ + Paint performs low-level painting for the item. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :type index: QtCore.QModelIndex + :rtype: None + """ + self.setRect(QtCore.QRect(option.rect)) + + painter.save() + + try: + self.paintBackground(painter, option, index) + + self.paintIcon(painter, option, index) + + if index.column() == 0 and self.sliderValue() != 0: + self.paintSlider(painter, option, index) + + if self.isTextVisible(): + self.paintText(painter, option, index) + + if index.column() == 0: + self.paintTypeIcon(painter, option) + + if index.column() == 0 and self.imageSequence(): + self.paintPlayhead(painter, option) + + finally: + painter.restore() + + def paintBackground(self, painter, option, index): + """ + Draw the background for the item. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :type index: QtCore.QModelIndex + """ + isSelected = option.state & QtWidgets.QStyle.State_Selected + isMouseOver = option.state & QtWidgets.QStyle.State_MouseOver + painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) + + visualRect = self.visualRect(option) + + if isSelected: + color = self.backgroundSelectedColor() + painter.setBrush(QtGui.QBrush(color)) + elif isMouseOver: + color = self.backgroundHoverColor() + painter.setBrush(QtGui.QBrush(color)) + else: + color = self.backgroundColor() + painter.setBrush(QtGui.QBrush(color)) + + if not self.itemsWidget().isIconView(): + spacing = 1 * self.dpi() + height = visualRect.height() - spacing + visualRect.setHeight(height) + + painter.drawRect(visualRect) + + def paintSlider(self, painter, option, index): + """ + Draw the virtual slider for the item. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :type index: QtCore.QModelIndex + """ + if not self.PAINT_SLIDER: + return + + if not self.itemsWidget().isIconView(): + return + + # Draw slider background + painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) + + rect = self.visualRect(option) + + color = self.itemsWidget().backgroundColor().toRgb() + color.setAlpha(75) + painter.setBrush(QtGui.QBrush(color)) + + height = rect.height() + + ratio = self.sliderValue() + + if ratio < 0: + width = 0 + elif ratio > 100: + width = rect.width() + else: + width = rect.width() * (float(ratio) / 100) + + rect.setWidth(width) + rect.setHeight(height) + + painter.drawRect(rect) + + # Draw slider value + rect = self.visualRect(option) + rect.setY(rect.y() + (4 * self.dpi())) + + color = self.itemsWidget().textColor().toRgb() + color.setAlpha(220) + pen = QtGui.QPen(color) + align = QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter + + painter.setPen(pen) + painter.drawText(rect, align, str(self.sliderValue()) + "%") + + def iconRect(self, option): + """ + Return the icon rect for the item. + + :type option: QtWidgets.QStyleOptionViewItem + :rtype: QtCore.QRect + """ + padding = self.padding() + rect = self.visualRect(option) + width = rect.width() + height = rect.height() + + if self.isLabelUnderItem(): + height -= self.textHeight() + + width -= padding + height -= padding + + rect.setWidth(width) + rect.setHeight(height) + + x = 0 + x += float(padding) / 2 + x += float((width - rect.width())) / 2 + + y = float((height - rect.height())) / 2 + y += float(padding) / 2 + + rect.translate(x, y) + return rect + + def scalePixmap(self, pixmap, rect): + """ + Scale the given pixmap to the give rect size. + + This method will cache the scaled pixmap if called with the same size. + + :type pixmap: QtGui.QPixmap + :type rect: QtCore.QRect + :rtype: QtGui.QPixmap + """ + rectChanged = True + + if self._pixmapRect: + widthChanged = self._pixmapRect.width() != rect.width() + heightChanged = self._pixmapRect.height() != rect.height() + + rectChanged = widthChanged or heightChanged + + if not self._pixmapScaled or rectChanged: + + self._pixmapScaled = pixmap.scaled( + rect.width(), + rect.height(), + QtCore.Qt.KeepAspectRatio, + QtCore.Qt.SmoothTransformation, + ) + + self._pixmapRect = rect + + return self._pixmapScaled + + def paintIcon(self, painter, option, index, align=None): + """ + Draw the icon for the item. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :rtype: None + """ + column = index.column() + pixmap = self.pixmap(column) + + if not pixmap: + return + + rect = self.iconRect(option) + pixmap = self.scalePixmap(pixmap, rect) + + pixmapRect = QtCore.QRect(rect) + pixmapRect.setWidth(pixmap.width()) + pixmapRect.setHeight(pixmap.height()) + + align = QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter + + x, y = 0, 0 + + isAlignBottom = align == QtCore.Qt.AlignBottom | QtCore.Qt.AlignLeft \ + or align == QtCore.Qt.AlignBottom | QtCore.Qt.AlignHCenter \ + or align == QtCore.Qt.AlignBottom | QtCore.Qt.AlignRight + + isAlignHCenter = align == QtCore.Qt.AlignHCenter \ + or align == QtCore.Qt.AlignCenter \ + or align == QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom \ + or align == QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop + + isAlignVCenter = align == QtCore.Qt.AlignVCenter \ + or align == QtCore.Qt.AlignCenter \ + or align == QtCore.Qt.AlignVCenter | QtCore.Qt.AlignLeft \ + or align == QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight + + if isAlignHCenter: + x += float(rect.width() - pixmap.width()) / 2 + + if isAlignVCenter: + y += float(rect.height() - pixmap.height()) / 2 + + elif isAlignBottom: + y += float(rect.height() - pixmap.height()) + + pixmapRect.translate(x, y) + painter.drawPixmap(pixmapRect, pixmap) + + def drawIconBorder(self, painter, pixmapRect): + """ + Draw a border around the icon. + + :type painter: QtWidgets.QPainter + :type pixmapRect: QtWidgets.QRect + :rtype: None + """ + pixmapRect = QtCore.QRect(pixmapRect) + pixmapRect.setX(pixmapRect.x() - 5) + pixmapRect.setY(pixmapRect.y() - 5) + pixmapRect.setWidth(pixmapRect.width() + 5) + pixmapRect.setHeight(pixmapRect.height() + 5) + + color = QtGui.QColor(255, 255, 255, 10) + painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) + painter.setBrush(QtGui.QBrush(color)) + + painter.drawRect(pixmapRect) + + def fontSize(self): + """ + Return the font size for the item. + + :rtype: int + """ + return self.DEFAULT_FONT_SIZE + + def font(self, column): + """ + Return the font for the given column. + + :type column: int + :rtype: QtWidgets.QFont + """ + default = QtWidgets.QTreeWidgetItem.font(self, column) + + font = self._fonts.get(column, default) + + font.setPixelSize(self.fontSize() * self.dpi()) + return font + + def setFont(self, column, font): + """ + Set the font for the given column. + + :type column: int + :type font: QtWidgets.QFont + :rtype: Noen + """ + self._fonts[column] = font + + def paintText(self, painter, option, index): + """ + Draw the text for the item. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :rtype: None + """ + column = index.column() + + if column == 0 and self.itemsWidget().isTableView(): + return + + self._paintText(painter, option, column) + + def textWidth(self, column): + text = self.text(column) + + font = self.font(column) + metrics = QtGui.QFontMetricsF(font) + textWidth = metrics.width(text) + return textWidth + + def _paintText(self, painter, option, column): + + if self.itemsWidget().isIconView(): + text = self.name() + else: + label = self.labelFromColumn(column) + text = self.displayText(label) + + isSelected = option.state & QtWidgets.QStyle.State_Selected + + if isSelected: + color = self.textSelectedColor() + else: + color = self.textColor() + + visualRect = self.visualRect(option) + + width = visualRect.width() + height = visualRect.height() + + padding = self.padding() + x = padding / 2 + y = padding / 2 + + visualRect.translate(x, y) + visualRect.setWidth(width - padding) + visualRect.setHeight(height - padding) + + font = self.font(column) + align = self.textAlignment(column) + metrics = QtGui.QFontMetricsF(font) + + if text: + textWidth = metrics.boundingRect(text).width() + else: + textWidth = 1 + + # # Check if the current text fits within the rect. + if textWidth > visualRect.width() - padding: + visualWidth = visualRect.width() + text = metrics.elidedText(text, QtCore.Qt.ElideRight, visualWidth) + align = QtCore.Qt.AlignLeft + + align = align | QtCore.Qt.AlignVCenter + + rect = QtCore.QRect(visualRect) + + if self.itemsWidget().isIconView(): + + if self.isLabelOverItem() or self.isLabelUnderItem(): + padding = 8 if padding < 8 else padding + + height = metrics.height() + (padding / 2) + y = (rect.y() + rect.height()) - height + + rect.setY(y) + rect.setHeight(height) + + if self.isLabelOverItem(): + color2 = self.itemsWidget().backgroundColor().toRgb() + color2.setAlpha(200) + + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtGui.QBrush(color2)) + painter.drawRect(rect) + + pen = QtGui.QPen(color) + painter.setPen(pen) + painter.setFont(font) + painter.drawText(rect, align, text) + + # ------------------------------------------------------------------------ + # Support for middle mouse slider + # ------------------------------------------------------------------------ + + def setSliderEnabled(self, enabled): + """ + Set if middle mouse slider is enabled. + + :type enabled: bool + """ + self._sliderEnabled = enabled + + def isSliderEnabled(self): + """ + Return true if middle mouse slider is enabled. + + :rtype: bool + """ + return self._sliderEnabled + + def sliderEvent(self, event): + """ + Called when the mouse moves while the middle mouse button is held down. + + :param event: QtGui.QMouseEvent + """ + if self.isSliderDown() and self.sliderPosition(): + value = (event.pos().x() - self.sliderPosition().x()) / 1.5 + value = math.ceil(value) + self.sliderPreviousValue() + if value != self.sliderValue(): + try: + self.setSliderValue(value) + except Exception: + self.setSliderDown(False) + + def resetSlider(self): + """Reset the slider value to zero.""" + self._sliderValue = 0.0 + self._sliderPreviousValue = 0.0 + + def setSliderDown(self, down): + """Called when the middle mouse button is released.""" + self._sliderDown = down + if not down: + self._sliderPosition = None + self._sliderPreviousValue = self.sliderValue() + + def isSliderDown(self): + """ + Return True if blending. + + :rtype: bool + """ + return self._sliderDown + + def setSliderValue(self, value): + """ + Set the blend value. + + :type value: float + :rtype: bool + """ + if self.isSliderEnabled(): + + if self._sliderValue == None: + return + + if value == self.sliderValue(): + return + + self._sliderValue = value + + if self.PAINT_SLIDER: + self.update() + + self.sliderChanged.emit(value) + + if self.treeWidget(): + self.treeWidget()._itemSliderMoved(self, value) + + if self.PAINT_SLIDER: + self.update() + + logger.debug("Blending:" + str(value)) + + def sliderValue(self): + """ + Return the blend value. + + :rtype: float + """ + return self._sliderValue + + def sliderPreviousValue(self): + """ + :rtype: float + """ + return self._sliderPreviousValue + + def sliderPosition(self): + """ + :rtype: QtGui.QPoint + """ + return self._sliderPosition + + # ------------------------------------------------------------------------ + # Support animated image sequence + # ------------------------------------------------------------------------ + + def imageSequenceEvent(self, event): + """ + :type event: QtCore.QEvent + :rtype: None + """ + if self.imageSequence(): + if studioqt.isControlModifier(): + if self.rect(): + x = event.pos().x() - self.rect().x() + width = self.rect().width() + percent = 1.0 - (float(width - x) / float(width)) + frame = int(self.imageSequence().frameCount() * percent) + self.imageSequence().jumpToFrame(frame) + self.updateFrame() + + def resetImageSequence(self): + self._imageSequence = None + + def imageSequence(self): + """ + :rtype: studioqt.ImageSequence + """ + return self._imageSequence + + def setImageSequence(self, value): + """ + :type value: studioqt.ImageSequence + """ + self._imageSequence = value + + def setImageSequencePath(self, path): + """ + :type path: str + """ + self._imageSequencePath = path + + def imageSequencePath(self): + """ + :rtype: str + """ + return self._imageSequencePath + + def stop(self): + """Stop playing the image sequence movie.""" + if self.imageSequence(): + self.imageSequence().stop() + + def play(self): + """Start playing the image sequence movie.""" + self.resetImageSequence() + path = self.imageSequencePath() or self.thumbnailPath() + + movie = None + + if os.path.isfile(path) and path.lower().endswith(".gif"): + + movie = QtGui.QMovie(path) + movie.setCacheMode(QtGui.QMovie.CacheAll) + movie.frameChanged.connect(self._frameChanged) + + elif os.path.isdir(path): + + if not self.imageSequence(): + movie = studioqt.ImageSequence(path) + movie.frameChanged.connect(self._frameChanged) + + if movie: + self.setImageSequence(movie) + self.imageSequence().start() + + def _frameChanged(self, frame=None): + """Triggered when the movie object updates to the given frame.""" + if not studioqt.isControlModifier(): + self.updateFrame() + + def updateFrame(self): + """Triggered when the movie object updates the current frame.""" + if self.imageSequence(): + pixmap = self.imageSequence().currentPixmap() + self.setIcon(0, pixmap) + + def playheadColor(self): + """ + Return the playhead color. + + :rtype: QtGui.Color + """ + return self.DEFAULT_PLAYHEAD_COLOR + + def paintPlayhead(self, painter, option): + """ + Paint the playhead if the item has an image sequence. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :rtype: None + """ + imageSequence = self.imageSequence() + + if imageSequence and self.underMouse(): + + count = imageSequence.frameCount() + current = imageSequence.currentFrameNumber() + + if count > 0: + percent = float((count + current) + 1) / count - 1 + else: + percent = 0 + + r = self.iconRect(option) + c = self.playheadColor() + + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtGui.QBrush(c)) + + if percent <= 0: + width = 0 + elif percent >= 1: + width = r.width() + else: + width = (percent * r.width()) - 1 + + height = 3 * self.dpi() + y = r.y() + r.height() - (height - 1) + + painter.drawRect(r.x(), y, width, height) + + def typeIconPath(self): + """ + Return the type icon path on disc. + + :rtype: path or None + """ + if self.TYPE_ICON_PATH is None: + return self.ICON_PATH + + return self.TYPE_ICON_PATH + + def typePixmap(self): + """ + Return the type pixmap for the plugin. + + :rtype: QtWidgets.QPixmap + """ + path = self.typeIconPath() + pixmap = self._TYPE_PIXMAP_CACHE.get(path) + + if not pixmap and path and os.path.exists(path): + self._TYPE_PIXMAP_CACHE[path] = QtGui.QPixmap(path) + + return self._TYPE_PIXMAP_CACHE.get(path) + + def typeIconRect(self, option): + """ + Return the type icon rect. + + :rtype: QtGui.QRect + """ + padding = 2 * self.dpi() + r = self.iconRect(option) + + x = r.x() + padding + y = r.y() + padding + rect = QtCore.QRect(x, y, 13 * self.dpi(), 13 * self.dpi()) + + return rect + + def paintTypeIcon(self, painter, option): + """ + Draw the item type icon at the top left. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :rtype: None + """ + rect = self.typeIconRect(option) + typePixmap = self.typePixmap() + if typePixmap: + painter.setOpacity(0.5) + painter.drawPixmap(rect, typePixmap) + painter.setOpacity(1) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemdelegate.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemdelegate.py new file mode 100644 index 0000000..da1a9af --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemdelegate.py @@ -0,0 +1,71 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtWidgets + +from .groupitem import GroupItem + + +class ItemDelegate(QtWidgets.QStyledItemDelegate): + + def __init__(self): + """ + This class is used to display data for the items in a ItemsWidget. + """ + QtWidgets.QStyledItemDelegate.__init__(self) + + self._itemsWidget = None + + def itemsWidget(self): + """ + Return the ItemsWidget that contains the item delegate. + + :rtype: studioqt.ItemsWidget + """ + return self._itemsWidget + + def setItemsWidget(self, itemsWidget): + """ + Set the ItemsWidget for the delegate. + + :type itemsWidget: studioqt.ItemsWidget + :rtype: None + """ + self._itemsWidget = itemsWidget + + def sizeHint(self, option, index): + """ + Return the size for the given index. + + :type option: QtWidgets.QStyleOptionViewItem + :type index: QtCore.QModelIndex + :rtype: QtCore.QSize + """ + #This will be called for each row. + item = self.itemsWidget().itemFromIndex(index) + + if isinstance(item, GroupItem): + return item.sizeHint() + + return self.itemsWidget().itemSizeHint(index) + + def paint(self, painter, option, index): + """ + Paint performs low-level painting for the given model index. + + :type painter: QtWidgets.QPainter + :type option: QtWidgets.QStyleOptionViewItem + :type index: QtCore.QModelIndex + :rtype: None + """ + item = self.itemsWidget().itemFromIndex(index) + item.paint(painter, option, index) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemswidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemswidget.py new file mode 100644 index 0000000..6b3edb5 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemswidget.py @@ -0,0 +1,1160 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging +import functools + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +from .item import Item +from .item import LabelDisplayOption +from .listview import ListView +from .groupitem import GroupItem +from .treewidget import TreeWidget +from .itemdelegate import ItemDelegate +from ..toastwidget import ToastWidget +from ..slideraction import SliderAction +from ..separatoraction import SeparatorAction + +logger = logging.getLogger(__name__) + + +class ItemsWidget(QtWidgets.QWidget): + + IconMode = "icon" + TableMode = "table" + + DEFAULT_PADDING = 5 + + DEFAULT_ZOOM_AMOUNT = 90 + DEFAULT_TEXT_HEIGHT = 20 + DEFAULT_WHEEL_SCROLL_STEP = 2 + + DEFAULT_MIN_SPACING = 0 + DEFAULT_MAX_SPACING = 50 + + DEFAULT_MIN_LIST_SIZE = 25 + DEFAULT_MIN_ICON_SIZE = 50 + + LABEL_DISPLAY_OPTION = LabelDisplayOption.Under + + keyPressed = QtCore.Signal(object) + + itemClicked = QtCore.Signal(object) + itemDoubleClicked = QtCore.Signal(object) + + zoomChanged = QtCore.Signal(object) + spacingChanged = QtCore.Signal(object) + + groupClicked = QtCore.Signal(object) + + itemSliderMoved = QtCore.Signal(object) + itemSliderReleased = QtCore.Signal() + + def __init__(self, *args): + QtWidgets.QWidget.__init__(self, *args) + + self._dpi = 1 + self._padding = self.DEFAULT_PADDING + + w, h = self.DEFAULT_ZOOM_AMOUNT, self.DEFAULT_ZOOM_AMOUNT + + self._iconSize = QtCore.QSize(w, h) + self._itemSizeHint = QtCore.QSize(w, h) + + self._zoomAmount = self.DEFAULT_ZOOM_AMOUNT + self._labelDisplayOption = self.LABEL_DISPLAY_OPTION + + self._dataset = None + self._treeWidget = TreeWidget(self) + + self._listView = ListView(self) + self._listView.setTreeWidget(self._treeWidget) + self._listView.installEventFilter(self) + + self._delegate = ItemDelegate() + self._delegate.setItemsWidget(self) + + self._listView.setItemDelegate(self._delegate) + self._treeWidget.setItemDelegate(self._delegate) + self._treeWidget.installEventFilter(self) + + self._toastWidget = ToastWidget(self) + self._toastWidget.hide() + self._toastEnabled = True + + self._textColor = QtGui.QColor(255, 255, 255, 200) + self._textSelectedColor = QtGui.QColor(255, 255, 255, 200) + self._itemBackgroundColor = QtGui.QColor(255, 255, 255, 30) + self._backgroundHoverColor = QtGui.QColor(255, 255, 255, 35) + self._backgroundSelectedColor = QtGui.QColor(30, 150, 255) + + layout = QtWidgets.QHBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(self._treeWidget) + layout.addWidget(self._listView) + + header = self.treeWidget().header() + header.sortIndicatorChanged.connect(self._sortIndicatorChanged) + + self.setLayout(layout) + + self.listView().itemClicked.connect(self._itemClicked) + self.listView().itemDoubleClicked.connect(self._itemDoubleClicked) + + self.treeWidget().itemClicked.connect(self._itemClicked) + self.treeWidget().itemDoubleClicked.connect(self._itemDoubleClicked) + self.treeWidget().itemSliderMoved.connect(self._itemSliderMoved) + self.treeWidget().itemSliderReleased.connect(self._itemSliderReleased) + + self.itemMoved = self._listView.itemMoved + self.itemDropped = self._listView.itemDropped + self.itemSelectionChanged = self._treeWidget.itemSelectionChanged + + def _itemSliderMoved(self, item, value): + self.itemSliderMoved.emit(value) + + def _itemSliderReleased(self, item, value): + self.itemSliderReleased.emit() + + def eventFilter(self, obj, event): + if event.type() == QtCore.QEvent.KeyPress: + self.keyPressed.emit(event) + + return super(ItemsWidget, self).eventFilter(obj, event) + + def _sortIndicatorChanged(self): + """ + Triggered when the sort indicator changes. + + :rtype: None + """ + pass + + def _itemClicked(self, item): + """ + Triggered when the given item has been clicked. + + :type item: studioqt.ItemsWidget + :rtype: None + """ + if isinstance(item, GroupItem): + self.groupClicked.emit(item) + else: + self.itemClicked.emit(item) + + def _itemDoubleClicked(self, item): + """ + Triggered when the given item has been double clicked. + + :type item: studioqt.Item + :rtype: None + """ + self.itemDoubleClicked.emit(item) + + def setDataset(self, dataset): + self._dataset = dataset + self.setColumnLabels(dataset.fieldNames()) + dataset.searchFinished.connect(self.updateItems) + + def dataset(self): + return self._dataset + + def updateItems(self): + """Sets the items to the widget.""" + selectedItems = self.selectedItems() + + self.treeWidget().blockSignals(True) + + try: + self.clearSelection() + + results = self.dataset().groupedResults() + + items = [] + + for group in results: + if group != "None": + groupItem = self.createGroupItem(group) + items.append(groupItem) + items.extend(results[group]) + + self.treeWidget().setItems(items) + + if selectedItems: + self.selectItems(selectedItems) + self.scrollToSelectedItem() + + finally: + self.treeWidget().blockSignals(False) + self.itemSelectionChanged.emit() + + def createGroupItem(self, text, children=None): + """ + Create a new group item for the given text and children. + + :type text: str + :type children: list[studioqt.Item] + + :rtype: GroupItem + """ + groupItem = GroupItem() + groupItem.setName(text) + groupItem.setStretchToWidget(self) + groupItem.setChildren(children) + + return groupItem + + def setToastEnabled(self, enabled): + """ + :type enabled: bool + :rtype: None + """ + self._toastEnabled = enabled + + def toastEnabled(self): + """ + :rtype: bool + """ + return self._toastEnabled + + def showToastMessage(self, text, duration=500): + """ + Show a toast with the given text for the given duration. + + :type text: str + :type duration: None or int + :rtype: None + """ + if self.toastEnabled(): + self._toastWidget.setDuration(duration) + self._toastWidget.setText(text) + self._toastWidget.show() + + def columnFromLabel(self, *args): + """ + Reimplemented for convenience. + + :return: int + """ + return self.treeWidget().columnFromLabel(*args) + + def setColumnHidden(self, column, hidden): + """ + Reimplemented for convenience. + + Calls self.treeWidget().setColumnHidden(column, hidden) + """ + self.treeWidget().setColumnHidden(column, hidden) + + def setLocked(self, value): + """ + Disables drag and drop. + + :Type value: bool + :rtype: None + """ + self.listView().setDragEnabled(not value) + self.listView().setDropEnabled(not value) + + def verticalScrollBar(self): + """ + Return the active vertical scroll bar. + + :rtype: QtWidget.QScrollBar + """ + if self.isTableView(): + return self.treeWidget().verticalScrollBar() + else: + return self.listView().verticalScrollBar() + + def visualItemRect(self, item): + """ + Return the visual rect for the item. + + :type item: QtWidgets.QTreeWidgetItem + :rtype: QtCore.QRect + """ + if self.isTableView(): + visualRect = self.treeWidget().visualItemRect(item) + else: + index = self.treeWidget().indexFromItem(item) + visualRect = self.listView().visualRect(index) + + return visualRect + + def isItemVisible(self, item): + """ + Return the visual rect for the item. + + :type item: QtWidgets.QTreeWidgetItem + :rtype: bool + """ + height = self.height() + itemRect = self.visualItemRect(item) + scrollBarY = self.verticalScrollBar().value() + + y = (scrollBarY - itemRect.y()) + height + return y > scrollBarY and y < scrollBarY + height + + def scrollToItem(self, item): + """ + Ensures that the item is visible. + + :type item: QtWidgets.QTreeWidgetItem + :rtype: None + """ + position = QtWidgets.QAbstractItemView.PositionAtCenter + + if self.isTableView(): + self.treeWidget().scrollToItem(item, position) + elif self.isIconView(): + self.listView().scrollToItem(item, position) + + def scrollToSelectedItem(self): + """ + Ensures that the item is visible. + + :rtype: None + """ + item = self.selectedItem() + if item: + self.scrollToItem(item) + + def dpi(self): + """ + return the zoom multiplier. + + Used for high resolution devices. + + :rtype: int + """ + return self._dpi + + def setDpi(self, dpi): + """ + Set the zoom multiplier. + + Used for high resolution devices. + + :type dpi: int + """ + self._dpi = dpi + self.refreshSize() + + def itemAt(self, pos): + """ + Return the current item at the given pos. + + :type pos: QtWidgets.QPoint + :rtype: studioqt.Item + """ + if self.isIconView(): + return self.listView().itemAt(pos) + else: + return self.treeView().itemAt(pos) + + def insertItems(self, items, itemAt=None): + """ + Insert the given items at the given itemAt position. + + :type items: list[studioqt.Item] + :type itemAt: studioqt.Item + :rtype: Nones + """ + self.addItems(items) + self.moveItems(items, itemAt=itemAt) + self.treeWidget().setItemsSelected(items, True) + + def moveItems(self, items, itemAt=None): + """ + Move the given items to the given itemAt position. + + :type items: list[studioqt.Item] + :type itemAt: studioqt.Item + :rtype: None + """ + self.listView().moveItems(items, itemAt=itemAt) + + def listView(self): + """ + Return the list view that contains the items. + + :rtype: ListView + """ + return self._listView + + def treeWidget(self): + """ + Return the tree widget that contains the items. + + :rtype: TreeWidget + """ + return self._treeWidget + + def clear(self): + """ + Reimplemented for convenience. + + Calls self.treeWidget().clear() + """ + self.treeWidget().clear() + + def refresh(self): + """Refresh the item size.""" + self.refreshSize() + + def refreshSize(self): + """ + Refresh the size of the items. + + :rtype: None + """ + self.setZoomAmount(self.zoomAmount() + 1) + self.setZoomAmount(self.zoomAmount() - 1) + self.repaint() + + def itemFromIndex(self, index): + """ + Return a pointer to the QTreeWidgetItem assocated with the given index. + + :type index: QtCore.QModelIndex + :rtype: QtWidgets.QTreeWidgetItem + """ + return self._treeWidget.itemFromIndex(index) + + def textFromItems(self, *args, **kwargs): + """ + Return all data for the given items and given column. + + :rtype: list[str] + """ + return self.treeWidget().textFromItems(*args, **kwargs) + + def textFromColumn(self, *args, **kwargs): + """ + Return all data for the given column. + + :rtype: list[str] + """ + return self.treeWidget().textFromColumn(*args, **kwargs) + + def setLabelDisplayOption(self, value): + """ + Set the label display option. + + :type value: LabelDisplayOption + """ + self._labelDisplayOption = value + self.refreshSize() + + def labelDisplayOption(self): + """ + Return the visibility of the item text. + + :rtype: LabelDisplayOption + """ + if self.isIconView(): + return self._labelDisplayOption + + def itemTextHeight(self): + """ + Return the height of the item text. + + :rtype: int + """ + return self.DEFAULT_TEXT_HEIGHT * self.dpi() + + def itemDelegate(self): + """ + Return the item delegate for the views. + + :rtype: ItemDelegate + """ + return self._delegate + + def settings(self): + """ + Return the current state of the widget. + + :rtype: dict + """ + settings = {} + + settings["columnLabels"] = self.columnLabels() + settings["padding"] = self.padding() + settings["spacing"] = self.spacing() + settings["zoomAmount"] = self.zoomAmount() + settings["selectedPaths"] = self.selectedPaths() + settings["labelDisplayOption"] = self._labelDisplayOption + settings.update(self.treeWidget().settings()) + + return settings + + def setSettings(self, settings): + """ + Set the current state of the widget. + + :type settings: dict + :rtype: None + """ + self.setToastEnabled(False) + + padding = settings.get("padding", 5) + self.setPadding(padding) + + spacing = settings.get("spacing", 2) + self.setSpacing(spacing) + + zoomAmount = settings.get("zoomAmount", 100) + self.setZoomAmount(zoomAmount) + + selectedPaths = settings.get("selectedPaths", []) + self.selectPaths(selectedPaths) + + value = settings.get("labelDisplayOption", self.LABEL_DISPLAY_OPTION) + self.setLabelDisplayOption(value) + + self.treeWidget().setSettings(settings) + + self.setToastEnabled(True) + + return settings + + def createCopyTextMenu(self): + return self.treeWidget().createCopyTextMenu() + + def createSettingsMenu(self): + + menu = QtWidgets.QMenu("Item View", self) + + action = SeparatorAction("View Settings", menu) + menu.addAction(action) + + action = SliderAction("Size", menu) + action.slider().setMinimum(10) + action.slider().setMaximum(200) + action.slider().setValue(self.zoomAmount()) + action.slider().valueChanged.connect(self.setZoomAmount) + menu.addAction(action) + + action = SliderAction("Border", menu) + action.slider().setMinimum(0) + action.slider().setMaximum(20) + action.slider().setValue(self.padding()) + action.slider().valueChanged.connect(self.setPadding) + menu.addAction(action) + # + action = SliderAction("Spacing", menu) + action.slider().setMinimum(self.DEFAULT_MIN_SPACING) + action.slider().setMaximum(self.DEFAULT_MAX_SPACING) + action.slider().setValue(self.spacing()) + action.slider().valueChanged.connect(self.setSpacing) + menu.addAction(action) + + action = SeparatorAction("Label Options", menu) + menu.addAction(action) + + for option in LabelDisplayOption.values(): + action = QtWidgets.QAction(option.title(), menu) + action.setCheckable(True) + action.setChecked(option == self.labelDisplayOption()) + callback = functools.partial(self.setLabelDisplayOption, option) + action.triggered.connect(callback) + menu.addAction(action) + + return menu + + def createItemsMenu(self, items=None): + """ + Create the item menu for given item. + + :rtype: QtWidgets.QMenu + """ + item = items or self.selectedItem() + + menu = QtWidgets.QMenu(self) + + if item: + try: + item.contextMenu(menu) + except Exception as error: + logger.exception(error) + else: + action = QtWidgets.QAction(menu) + action.setText("No Item selected") + action.setDisabled(True) + + menu.addAction(action) + + return menu + + def createContextMenu(self): + """ + Create and return the context menu for the widget. + + :rtype: QtWidgets.QMenu + """ + menu = self.createItemsMenu() + + settingsMenu = self.createSettingsMenu() + menu.addMenu(settingsMenu) + + return menu + + def contextMenuEvent(self, event): + """ + Show the context menu. + + :type event: QtCore.QEvent + :rtype: None + """ + menu = self.createContextMenu() + point = QtGui.QCursor.pos() + return menu.exec_(point) + + # ------------------------------------------------------------------------ + # Support for saving the current item order. + # ------------------------------------------------------------------------ + + def itemData(self, columnLabels): + """ + Return all column data for the given column labels. + + :type columnLabels: list[str] + :rtype: dict + + """ + data = {} + + for item in self.items(): + key = item.id() + + for columnLabel in columnLabels: + column = self.treeWidget().columnFromLabel(columnLabel) + value = item.data(column, QtCore.Qt.EditRole) + + data.setdefault(key, {}) + data[key].setdefault(columnLabel, value) + + return data + + def setItemData(self, data): + """ + Set the item data for all the current items. + + :type data: dict + :rtype: None + """ + for item in self.items(): + key = item.id() + if key in data: + item.setItemData(data[key]) + + def updateColumns(self): + """ + Update the column labels with the current item data. + + :rtype: None + """ + self.treeWidget().updateHeaderLabels() + + def columnLabels(self): + """ + Set all the column labels. + + :rtype: list[str] + """ + return self.treeWidget().columnLabels() + + def _removeDuplicates(self, labels): + """ + Removes duplicates from a list in Python, whilst preserving order. + + :type labels: list[str] + :rtype: list[str] + """ + s = set() + sadd = s.add + return [x for x in labels if x.strip() and not (x in s or sadd(x))] + + def setColumnLabels(self, labels): + """ + Set the columns for the widget. + + :type labels: list[str] + :rtype: None + """ + labels = self._removeDuplicates(labels) + + if "Custom Order" not in labels: + labels.append("Custom Order") + + # if "Search Order" not in labels: + # labels.append("Search Order") + + self.treeWidget().setHeaderLabels(labels) + + self.setColumnHidden("Custom Order", True) + # self.setColumnHidden("Search Order", True) + + def items(self): + """ + Return all the items in the widget. + + :rtype: list[studioqt.Item] + """ + return self._treeWidget.items() + + def addItems(self, items): + """ + Add the given items to the items widget. + + :type items: list[studioqt.Item] + :rtype: None + """ + self._treeWidget.addTopLevelItems(items) + + def addItem(self, item): + """ + Add the item to the tree widget. + + :type item: Item + :rtype: None + """ + self.addItems([item]) + + def columnLabelsFromItems(self): + """ + Return the column labels from all the items. + + :rtype: list[str] + """ + seq = [] + for item in self.items(): + seq.extend(item._textColumnOrder) + + seen = set() + return [x for x in seq if x not in seen and not seen.add(x)] + + def refreshColumns(self): + self.setColumnLabels(self.columnLabelsFromItems()) + + def padding(self): + """ + Return the item padding. + + :rtype: int + """ + return self._padding + + def setPadding(self, value): + """ + Set the item padding. + + :type: int + :rtype: None + """ + if value % 2 == 0: + self._padding = value + else: + self._padding = value + 1 + self.repaint() + + self.showToastMessage("Border: " + str(value)) + + def spacing(self): + """ + Return the spacing between the items. + + :rtype: int + """ + return self._listView.spacing() + + def setSpacing(self, spacing): + """ + Set the spacing between the items. + + :type spacing: int + :rtype: None + """ + self._listView.setSpacing(spacing) + self.scrollToSelectedItem() + + self.showToastMessage("Spacing: " + str(spacing)) + + def itemSizeHint(self, index=None): + """ + Get the item size hint. + + :type index: QtWidgets.QModelIndex + :rtype: QtCore.QSize + """ + return self._itemSizeHint + + def iconSize(self): + """ + Return the icon size for the views. + + :rtype: QtCore.QSize + """ + return self._iconSize + + def setIconSize(self, size): + """ + Set the icon size for the views. + + :type size: QtCore.QSize + :rtype: None + """ + self._iconSize = size + + if self.labelDisplayOption() == LabelDisplayOption.Under: + w = size.width() + h = size.width() + self.itemTextHeight() + self._itemSizeHint = QtCore.QSize(w, h) + elif size.height() < self.itemTextHeight(): + self._itemSizeHint = QtCore.QSize(size.width(), self.itemTextHeight()) + else: + self._itemSizeHint = size + + self._listView.setIconSize(size) + self._treeWidget.setIconSize(size) + + def clearSelection(self): + """ + Clear the user selection. + + :rtype: None + """ + self._treeWidget.clearSelection() + + def wheelScrollStep(self): + """ + Return the wheel scroll step amount. + + :rtype: int + """ + return self.DEFAULT_WHEEL_SCROLL_STEP + + def model(self): + """ + Return the model that this view is presenting. + + :rtype: QAbstractItemModel + """ + return self._treeWidget.model() + + def indexFromItem(self, item): + """ + Return the QModelIndex assocated with the given item. + + :type item: QtWidgets.QTreeWidgetItem. + :rtype: QtCore.QModelIndex + """ + return self._treeWidget.indexFromItem(item) + + def selectionModel(self): + """ + Return the current selection model. + + :rtype: QtWidgets.QItemSelectionModel + """ + return self._treeWidget.selectionModel() + + def selectedItem(self): + """ + Return the last selected non-hidden item. + + :rtype: QtWidgets.QTreeWidgetItem + """ + return self._treeWidget.selectedItem() + + def selectedItems(self): + """ + Return a list of all selected non-hidden items. + + :rtype: list[QtWidgets.QTreeWidgetItem] + """ + return self._treeWidget.selectedItems() + + def setItemHidden(self, item, value): + """ + Set the visibility of given item. + + :type item: QtWidgets.QTreeWidgetItem + :type value: bool + :rtype: None + """ + item.setHidden(value) + + def setItemsHidden(self, items, value): + """ + Set the visibility of given items. + + :type items: list[QtWidgets.QTreeWidgetItem] + :type value: bool + :rtype: None + """ + for item in items: + self.setItemHidden(item, value) + + def selectedPaths(self): + """ + Return the selected item paths. + + :rtype: list[str] + """ + paths = [] + for item in self.selectedItems(): + path = item.url().toLocalFile() + paths.append(path) + return paths + + def selectPaths(self, paths): + """ + Selected the items that have the given paths. + + :type paths: list[str] + :rtype: None + """ + for item in self.items(): + path = item.id() + if path in paths: + item.setSelected(True) + + def selectItems(self, items): + """ + Select the given items. + + :type items: list[studiolibrary.LibraryItem] + :rtype: None + """ + paths = [item.id() for item in items] + self.selectPaths(paths) + + def isIconView(self): + """ + Return True if widget is in Icon mode. + + :rtype: bool + """ + return not self._listView.isHidden() + + def isTableView(self): + """ + Return True if widget is in List mode. + + :rtype: bool + """ + return not self._treeWidget.isHidden() + + def setViewMode(self, mode): + """ + Set the view mode for this widget. + + :type mode: str + :rtype: None + """ + if mode == self.IconMode: + self.setZoomAmount(self.DEFAULT_MIN_ICON_SIZE) + elif mode == self.TableMode: + self.setZoomAmount(self.DEFAULT_MIN_ICON_SIZE) + + def _setViewMode(self, mode): + """ + Set the view mode for this widget. + + :type mode: str + :rtype: None + """ + if mode == self.IconMode: + self.setIconMode() + elif mode == self.TableMode: + self.setListMode() + + def setListMode(self): + """ + Set the tree widget visible. + + :rtype: None + """ + self._listView.hide() + self._treeWidget.show() + self._treeWidget.setFocus() + + def setIconMode(self): + """ + Set the list view visible. + + :rtype: None + """ + self._treeWidget.hide() + self._listView.show() + self._listView.setFocus() + + def zoomAmount(self): + """ + Return the zoom amount for the widget. + + :rtype: int + """ + return self._zoomAmount + + def setZoomAmount(self, value): + """ + Set the zoom amount for the widget. + + :type value: int + :rtype: None + """ + if value < self.DEFAULT_MIN_LIST_SIZE: + value = self.DEFAULT_MIN_LIST_SIZE + + self._zoomAmount = value + size = QtCore.QSize(value * self.dpi(), value * self.dpi()) + self.setIconSize(size) + + if value >= self.DEFAULT_MIN_ICON_SIZE: + self._setViewMode(self.IconMode) + else: + self._setViewMode(self.TableMode) + + columnWidth = value * self.dpi() + self.itemTextHeight() + + self._treeWidget.setIndentation(0) + self._treeWidget.setColumnWidth(0, columnWidth) + self.scrollToSelectedItem() + + msg = "Size: {0}%".format(value) + self.showToastMessage(msg) + + def wheelEvent(self, event): + """ + Triggered on any wheel events for the current viewport. + + :type event: QtWidgets.QWheelEvent + :rtype: None + """ + modifier = QtWidgets.QApplication.keyboardModifiers() + + validModifiers = ( + QtCore.Qt.AltModifier, + QtCore.Qt.ControlModifier, + ) + + if modifier in validModifiers: + numDegrees = event.angleDelta().y() / 8 + numSteps = numDegrees / 15 + + delta = (numSteps * self.wheelScrollStep()) + value = self.zoomAmount() + delta + self.setZoomAmount(value) + + def setTextColor(self, color): + """ + Set the item text color. + + :type color: QtWidgets.QtColor + """ + self._textColor = color + + def setTextSelectedColor(self, color): + """ + Set the text color when an item is selected. + + :type color: QtWidgets.QtColor + """ + self._textSelectedColor = color + + def setBackgroundColor(self, color): + """ + Set the item background color. + + :type color: QtWidgets.QtColor + """ + self._backgroundColor = color + + def setItemBackgroundColor(self, color): + """ + Set the item background color. + + :type color: QtWidgets.QtColor + """ + self._itemBackgroundColor = color + + def setBackgroundHoverColor(self, color): + """ + Set the background color when the mouse hovers over the item. + + :type color: QtWidgets.QtColor + """ + self._backgroundHoverColor = color + + def setBackgroundSelectedColor(self, color): + """ + Set the background color when an item is selected. + + :type color: QtWidgets.QtColor + """ + self._backgroundSelectedColor = color + self._listView.setRubberBandColor(QtGui.QColor(200, 200, 200, 255)) + + def textColor(self): + """ + Return the item text color. + + :rtype: QtGui.QColor + """ + return self._textColor + + def textSelectedColor(self): + """ + Return the item text color when selected. + + :rtype: QtGui.QColor + """ + return self._textSelectedColor + + def backgroundColor(self): + """ + Return the item background color. + + :rtype: QtWidgets.QtColor + """ + return self._backgroundColor + + def itemBackgroundColor(self): + """ + Return the item background color. + + :rtype: QtWidgets.QtColor + """ + return self._itemBackgroundColor + + def backgroundHoverColor(self): + """ + Return the background color for when the mouse is over an item. + + :rtype: QtWidgets.QtColor + """ + return self._backgroundHoverColor + + def backgroundSelectedColor(self): + """ + Return the background color when an item is selected. + + :rtype: QtWidgets.QtColor + """ + return self._backgroundSelectedColor diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemviewmixin.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemviewmixin.py new file mode 100644 index 0000000..ad6f550 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/itemviewmixin.py @@ -0,0 +1,306 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging + +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt + + +logger = logging.getLogger(__name__) + + +class ItemViewMixin(object): + + """ + The ItemViewMixin class is a mixin for any widgets that + inherit from the QAbstractItemView class. This class should be used + for similar methods between views. + """ + + def __init__(self, *args): + self._hoverItem = None + self._mousePressButton = None + self._currentItem = None + self._currentSelection = [] + + def cleanDirtyObjects(self): + """ + Remove any objects that may have been deleted. + + :rtype: None + """ + if self._currentItem: + try: + self._currentItem.text(0) + except RuntimeError: + self._hoverItem = None + self._currentItem = None + self._currentSelection = None + + def itemsWidget(self): + """ + Return True if a control modifier is currently active. + + :rtype: studioqt.ItemsWidget + """ + return self.parent() + + def isControlModifier(self): + """ + Return True if a control modifier is currently active. + + :rtype: bool + """ + modifiers = QtWidgets.QApplication.keyboardModifiers() + isAltModifier = modifiers == QtCore.Qt.AltModifier + isControlModifier = modifiers == QtCore.Qt.ControlModifier + return isAltModifier or isControlModifier + + def itemsFromIndexes(self, indexes): + """ + Return a list of Tree Widget Items assocated with the given indexes. + + :type indexes: list[QtCore.QModelIndex] + :rtype: list[QtWidgets.QTreeWidgetItem] + """ + items = {} + for index in indexes: + item = self.itemFromIndex(index) + items[id(item)] = item + + return items.values() + + def selectionChanged(self, selected, deselected): + """ + Triggered when the current item has been selected or deselected. + + :type selected: QtWidgets.QItemSelection + :type deselected: QtWidgets.QItemSelection + """ + selectedItems_ = self.selectedItems() + + if self._currentSelection != selectedItems_: + self._currentSelection = selectedItems_ + + indexes1 = selected.indexes() + selectedItems = self.itemsFromIndexes(indexes1) + + indexes2 = deselected.indexes() + deselectedItems = self.itemsFromIndexes(indexes2) + + items = list(selectedItems) + list(deselectedItems) + for item in items: + item.selectionChanged() + # + QtWidgets.QAbstractItemView.selectionChanged(self, selected, deselected) + + def mousePressButton(self): + """ + Return the mouse button that has been pressed. + + :rtype: None or QtCore.Qt.MouseButton + """ + return self._mousePressButton + + def wheelEvent(self, event): + """ + Triggered on any wheel events for the current viewport. + + :type event: QtWidgets.QWheelEvent + :rtype: None + """ + if self.isControlModifier(): + event.ignore() + else: + QtWidgets.QAbstractItemView.wheelEvent(self, event) + + item = self.itemAt(QtCore.QPoint(event.position().toPoint())) + self.itemUpdateEvent(item, event) + + def keyPressEvent(self, event): + """ + Triggered on user key press events for the current viewport. + + :type event: QtCore.QKeyEvent + :rtype: None + """ + item = self.selectedItem() + if item: + self.itemKeyPressEvent(item, event) + + validKeys = [ + QtCore.Qt.Key_Up, + QtCore.Qt.Key_Left, + QtCore.Qt.Key_Down, + QtCore.Qt.Key_Right, + ] + + if event.isAccepted(): + if event.key() in validKeys: + QtWidgets.QAbstractItemView.keyPressEvent(self, event) + + def mousePressEvent(self, event): + """ + Triggered on user mouse press events for the current viewport. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + self._mousePressButton = event.button() + + item = self.itemAt(event.pos()) + + if item: + self.itemMousePressEvent(item, event) + + QtWidgets.QAbstractItemView.mousePressEvent(self, event) + + def mouseReleaseEvent(self, event): + """ + Triggered on user mouse release events for the current viewport. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + self._mousePressButton = None + + item = self.selectedItem() + if item: + self.itemMouseReleaseEvent(item, event) + + def mouseMoveEvent(self, event): + """ + Triggered on user mouse move events for the current viewport. + + :type event: QtCore.QMouseEvent + :rtype: None + """ + if self._mousePressButton == QtCore.Qt.MiddleButton: + item = self.selectedItem() + else: + item = self.itemAt(event.pos()) + + self.itemUpdateEvent(item, event) + + def leaveEvent(self, event): + """ + Triggered when the mouse leaves the widget. + + :type event: QtCore.QMouseEvent + :rtype: None + """ + if self._mousePressButton != QtCore.Qt.MiddleButton: + self.itemUpdateEvent(None, event) + + QtWidgets.QAbstractItemView.leaveEvent(self, event) + + def itemUpdateEvent(self, item, event): + """ + Triggered on user key press events for the current viewport. + + :type item: studioqt.Item + :type event: QtCore.QKeyEvent + :rtype: None + """ + self.cleanDirtyObjects() + + if id(self._currentItem) != id(item): + + if self._currentItem: + self.itemMouseLeaveEvent(self._currentItem, event) + self._currentItem = None + + if item and not self._currentItem: + self._currentItem = item + self.itemMouseEnterEvent(item, event) + + if self._currentItem: + self.itemMouseMoveEvent(item, event) + + def itemMouseEnterEvent(self, item, event): + """ + Triggered when the mouse enters the given item. + + :type item: QtWidgets.QTreeWidgetItem + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + item.mouseEnterEvent(event) + logger.debug("Mouse Enter: " + item.text(0)) + + def itemMouseLeaveEvent(self, item, event): + """ + Triggered when the mouse leaves the given item. + + :type item: QtWidgets.QTreeWidgetItem + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + item.mouseLeaveEvent(event) + logger.debug("Mouse Leave: " + item.text(0)) + + def itemMouseMoveEvent(self, item, event): + """ + Triggered when the mouse moves within the given item. + + :type item: QtWidgets.QTreeWidgetItem + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + item.mouseMoveEvent(event) + + def itemMousePressEvent(self, item, event): + """ + Triggered when the mouse is pressed on the given item. + + :type item: QtWidgets.QTreeWidgetItem + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + item.mousePressEvent(event) + logger.debug("Mouse Press: " + item.text(0)) + + def itemMouseReleaseEvent(self, item, event): + """ + Triggered when the mouse is released on the given item. + + :type item: QtWidgets.QTreeWidgetItem + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + item.mouseReleaseEvent(event) + logger.debug("Mouse Released: " + item.text(0)) + + def itemKeyPressEvent(self, item, event): + """ + Triggered when a key is pressed for the selected item. + + :type item: QtWidgets.QTreeWidgetItem + :type event: QtWidgets.QKeyEvent + :rtype: None + """ + item.keyPressEvent(event) + logger.debug("Key Press: " + item.text(0)) + + def itemKeyReleaseEvent(self, item, event): + """ + Triggered when a key is released for the selected item. + + :type item: QtWidgets.QTreeWidgetItem + :type event: QtWidgets.QKeyEvent + :rtype: None + """ + item.keyReleaseEvent(event) + logger.debug("Key Release: " + item.text(0)) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/listview.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/listview.py new file mode 100644 index 0000000..c58bd80 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/listview.py @@ -0,0 +1,630 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + + +from .itemviewmixin import ItemViewMixin + + +logger = logging.getLogger(__name__) + + +class ListView(ItemViewMixin, QtWidgets.QListView): + + itemMoved = QtCore.Signal(object) + itemDropped = QtCore.Signal(object) + itemClicked = QtCore.Signal(object) + itemDoubleClicked = QtCore.Signal(object) + + DEFAULT_DRAG_THRESHOLD = 10 + + def __init__(self, *args): + QtWidgets.QListView.__init__(self, *args) + ItemViewMixin.__init__(self) + + self._treeWidget = None + self._rubberBand = None + self._rubberBandStartPos = None + self._rubberBandColor = QtGui.QColor(QtCore.Qt.white) + self._customSortOrder = [] + + self._drag = None + self._dragStartPos = None + self._dragStartIndex = None + self._dropEnabled = True + + self.setSpacing(5) + + self.setMouseTracking(True) + self.setSelectionRectVisible(True) + self.setViewMode(QtWidgets.QListView.IconMode) + self.setResizeMode(QtWidgets.QListView.Adjust) + self.setSelectionMode(QtWidgets.QListWidget.ExtendedSelection) + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + self.setAcceptDrops(True) + self.setDragEnabled(True) + self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop) + + self.clicked.connect(self._indexClicked) + self.doubleClicked.connect(self._indexDoubleClicked) + + def _indexClicked(self, index): + """ + Triggered when the user clicks on an index. + + :type index: QtCore.QModelIndex + :rtype: None + """ + item = self.itemFromIndex(index) + item.clicked() + self.setItemsSelected([item], True) + self.itemClicked.emit(item) + + def _indexDoubleClicked(self, index): + """ + Triggered when the user double clicks on an index. + + :type index: QtCore.QModelIndex + :rtype: None + """ + item = self.itemFromIndex(index) + self.setItemsSelected([item], True) + item.doubleClicked() + self.itemDoubleClicked.emit(item) + + def treeWidget(self): + """ + Return the tree widget that contains the item. + + :rtype: QtWidgets.QTreeWidget + """ + return self._treeWidget + + def setTreeWidget(self, treeWidget): + """ + Set the tree widget that contains the item. + + :type treeWidget: QtWidgets.QTreeWidget + :rtype: None + """ + self._treeWidget = treeWidget + self.setModel(treeWidget.model()) + self.setSelectionModel(treeWidget.selectionModel()) + + def scrollToItem(self, item, pos=None): + """ + Ensures that the item is visible. + + :type item: QtWidgets.QTreeWidgetItem + :type pos: QtCore.QPoint or None + :rtype: None + """ + index = self.indexFromItem(item) + pos = pos or QtWidgets.QAbstractItemView.PositionAtCenter + + self.scrollTo(index, pos) + + def items(self): + """ + Return all the items. + + :rtype: list[QtWidgets.QTreeWidgetItem] + """ + return self.treeWidget().items() + + def itemAt(self, pos): + """ + Return a pointer to the item at the coordinates p. + + The coordinates are relative to the tree widget's viewport(). + + :type pos: QtCore.QPoint + :rtype: QtWidgets.QTreeWidgetItem + """ + index = self.indexAt(pos) + return self.itemFromIndex(index) + + def indexFromItem(self, item): + """ + Return the QModelIndex assocated with the given item. + + :type item: QtWidgets.QTreeWidgetItem. + :rtype: QtCore.QModelIndex + """ + return self.treeWidget().indexFromItem(item) + + def itemFromIndex(self, index): + """ + Return a pointer to the QTreeWidgetItem assocated with the given index. + + :type index: QtCore.QModelIndex + :rtype: QtWidgets.QTreeWidgetItem + """ + return self.treeWidget().itemFromIndex(index) + + def insertItem(self, row, item): + """ + Inserts the item at row in the top level in the view. + + :type row: int + :type item: QtWidgets.QTreeWidgetItem + :rtype: None + """ + self.treeWidget().insertTopLevelItem(row, item) + + def takeItems(self, items): + """ + Removes and returns the items from the view + + :type items: list[QtWidgets.QTreeWidgetItem] + :rtype: list[QtWidgets.QTreeWidgetItem] + """ + for item in items: + row = self.treeWidget().indexOfTopLevelItem(item) + self.treeWidget().takeTopLevelItem(row) + + return items + + def selectedItem(self): + """ + Return the last selected non-hidden item. + + :rtype: QtWidgets.QTreeWidgetItem + """ + return self.treeWidget().selectedItem() + + def selectedItems(self): + """ + Return a list of all selected non-hidden items. + + :rtype: list[QtWidgets.QTreeWidgetItem] + """ + return self.treeWidget().selectedItems() + + def setIndexesSelected(self, indexes, value): + """ + Set the selected state for the given indexes. + + :type indexes: list[QtCore.QModelIndex] + :type value: bool + :rtype: None + """ + items = self.itemsFromIndexes(indexes) + self.setItemsSelected(items, value) + + def setItemsSelected(self, items, value): + """ + Set the selected state for the given items. + + :type items: list[studioqt.WidgetItem] + :type value: bool + :rtype: None + """ + self.treeWidget().blockSignals(True) + for item in items: + item.setSelected(value) + self.treeWidget().blockSignals(False) + + def moveItems(self, items, itemAt): + """ + Move the given items to the position of the destination row. + + :type items: list[studioqt.Item] + :type itemAt: studioqt.Item + :rtype: None + """ + scrollValue = self.verticalScrollBar().value() + + self.treeWidget().moveItems(items, itemAt) + self.itemMoved.emit(items[-1]) + + self.verticalScrollBar().setValue(scrollValue) + + # --------------------------------------------------------------------- + # Support for a custom colored rubber band. + # --------------------------------------------------------------------- + + def createRubberBand(self): + """ + Create a new instance of the selection rubber band. + + :rtype: QtWidgets.QRubberBand + """ + rubberBand = QtWidgets.QRubberBand(QtWidgets.QRubberBand.Rectangle, self) + palette = QtGui.QPalette() + color = self.rubberBandColor() + palette.setBrush(QtGui.QPalette.Highlight, QtGui.QBrush(color)) + rubberBand.setPalette(palette) + return rubberBand + + def setRubberBandColor(self, color): + """ + Set the color for the rubber band. + + :type color: QtGui.QColor + :rtype: None + """ + self._rubberBand = None + self._rubberBandColor = color + + def rubberBandColor(self): + """ + Return the rubber band color for this widget. + + :rtype: QtGui.QColor + """ + return self._rubberBandColor + + def rubberBand(self): + """ + Return the selection rubber band for this widget. + + :rtype: QtWidgets.QRubberBand + """ + if not self._rubberBand: + self.setSelectionRectVisible(False) + self._rubberBand = self.createRubberBand() + + return self._rubberBand + + # --------------------------------------------------------------------- + # Events + # --------------------------------------------------------------------- + + def validateDragEvent(self, event): + """ + Validate the drag event. + + :type event: QtWidgets.QMouseEvent + :rtype: bool + """ + return QtCore.Qt.LeftButton == event.mouseButtons() + + def mousePressEvent(self, event): + """ + Triggered when the user presses the mouse button for the viewport. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + item = self.itemAt(event.pos()) + if not item: + self.clearSelection() + + ItemViewMixin.mousePressEvent(self, event) + if event.isAccepted(): + QtWidgets.QListView.mousePressEvent(self, event) + if item: + item.setSelected(True) + + self.endDrag() + self._dragStartPos = event.pos() + + isLeftButton = self.mousePressButton() == QtCore.Qt.LeftButton + isItemDraggable = item and item.dragEnabled() + isSelectionEmpty = not self.selectedItems() + + if isLeftButton and (isSelectionEmpty or not isItemDraggable): + self.rubberBandStartEvent(event) + + def mouseMoveEvent(self, event): + """ + Triggered when the user moves the mouse over the current viewport. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + if not self.isDraggingItems(): + + isLeftButton = self.mousePressButton() == QtCore.Qt.LeftButton + + if isLeftButton and self.rubberBand().isHidden() and self.selectedItems(): + self.startDrag(event) + else: + ItemViewMixin.mouseMoveEvent(self, event) + QtWidgets.QListView.mouseMoveEvent(self, event) + + if isLeftButton: + self.rubberBandMoveEvent(event) + + def mouseReleaseEvent(self, event): + """ + Triggered when the user releases the mouse button for this viewport. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + item = self.itemAt(event.pos()) + items = self.selectedItems() + + ItemViewMixin.mouseReleaseEvent(self, event) + + if item not in items: + if event.button() != QtCore.Qt.MiddleButton: + QtWidgets.QListView.mouseReleaseEvent(self, event) + elif not items: + QtWidgets.QListView.mouseReleaseEvent(self, event) + + self.endDrag() + self.rubberBand().hide() + + def rubberBandStartEvent(self, event): + """ + Triggered when the user presses an empty area. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + self._rubberBandStartPos = event.pos() + rect = QtCore.QRect(self._rubberBandStartPos, QtCore.QSize()) + + rubberBand = self.rubberBand() + rubberBand.setGeometry(rect) + rubberBand.show() + + def rubberBandMoveEvent(self, event): + """ + Triggered when the user moves the mouse over the current viewport. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + if self.rubberBand() and self._rubberBandStartPos: + rect = QtCore.QRect(self._rubberBandStartPos, event.pos()) + rect = rect.normalized() + self.rubberBand().setGeometry(rect) + + # ----------------------------------------------------------------------- + # Support for drag and drop + # ----------------------------------------------------------------------- + + def rowAt(self, pos): + """ + Return the row for the given pos. + + :type pos: QtCore.QPoint + :rtype: int + """ + return self.treeWidget().rowAt(pos) + + def itemsFromUrls(self, urls): + """ + Return items from the given url objects. + + :type urls: list[QtCore.QUrl] + :rtype: list[studioqt.Item] + """ + items = [] + for url in urls: + item = self.itemFromUrl(url) + if item: + items.append(item) + return items + + def itemFromUrl(self, url): + """ + Return the item from the given url object. + + :type url: QtCore.QUrl + :rtype: studioqt.Item + """ + return self.itemFromPath(url.path()) + + def itemsFromPaths(self, paths): + """ + Return the items from the given paths. + + :type paths: list[str] + :rtype: list[studioqt.Item] + """ + items = [] + for path in paths: + item = self.itemFromPath(path) + if item: + items.append(item) + return items + + def itemFromPath(self, path): + """ + Return the item from the given path. + + :type path: str + :rtype: studioqt.Item + """ + for item in self.items(): + path_ = item.url().path() + if path_ and path_ == path: + return item + + def setDropEnabled(self, value): + """ + :type value: bool + :rtype: None + """ + self._dropEnabled = value + + def dropEnabled(self): + """ + :rtype: bool + """ + return self._dropEnabled + + def dragThreshold(self): + """ + :rtype: int + """ + return self.DEFAULT_DRAG_THRESHOLD + + def mimeData(self, items): + """ + :type items: list[studioqt.Item] + :rtype: QtCore.QMimeData + """ + mimeData = QtCore.QMimeData() + + urls = [item.url() for item in items] + text = "\n".join([item.mimeText() for item in items]) + + mimeData.setUrls(urls) + mimeData.setText(text) + + return mimeData + + def dropEvent(self, event): + """ + This event handler is called when the drag is dropped on this widget. + + :type event: QtWidgets.QDropEvent + :rtype: None + """ + item = self.itemAt(event.pos()) + selectedItems = self.selectedItems() + + if selectedItems and item: + if self.treeWidget().isSortByCustomOrder(): + self.moveItems(selectedItems, item) + else: + msg = "You can only re-order items when sorting by custom order." + logger.info(msg) + + if item: + item.dropEvent(event) + + self.itemDropped.emit(event) + + def dragMoveEvent(self, event): + """ + This event handler is called if a drag is in progress. + + :type event: QtGui.QDragMoveEvent + :rtype: None + """ + mimeData = event.mimeData() + + if (mimeData.hasText() or mimeData.hasUrls()) and self.dropEnabled(): + event.accept() + else: + event.ignore() + + def dragEnterEvent(self, event): + """ + This event handler is called when the mouse enters this widget + while a drag is in pregress. + + :type event: QtGui.QDragEnterEvent + :rtype: None + """ + mimeData = event.mimeData() + + if (mimeData.hasText() or mimeData.hasUrls()) and self.dropEnabled(): + event.accept() + else: + event.ignore() + + def isDraggingItems(self): + """ + Return true if the user is currently dragging items. + + :rtype: bool + """ + return bool(self._drag) + + def startDrag(self, event): + """ + Starts a drag using the given event. + + :type event: QtCore.QEvent + :rtype: None + """ + if not self.dragEnabled(): + return + + if self._dragStartPos and hasattr(event, "pos"): + + item = self.itemAt(event.pos()) + + if item and item.dragEnabled(): + + self._dragStartIndex = self.indexAt(event.pos()) + + point = self._dragStartPos - event.pos() + dt = self.dragThreshold() + + if point.x() > dt or point.y() > dt or point.x() < -dt or point.y() < -dt: + + items = self.selectedItems() + mimeData = self.mimeData(items) + + pixmap = self.dragPixmap(item, items) + hotSpot = QtCore.QPoint(pixmap.width() / 2, pixmap.height() / 2) + + self._drag = QtGui.QDrag(self) + self._drag.setPixmap(pixmap) + self._drag.setHotSpot(hotSpot) + self._drag.setMimeData(mimeData) + self._drag.exec_(QtCore.Qt.MoveAction) + + def endDrag(self): + """ + Ends the current drag. + + :rtype: None + """ + logger.debug("End Drag") + self._dragStartPos = None + self._dragStartIndex = None + if self._drag: + del self._drag + self._drag = None + + def dragPixmap(self, item, items): + """ + Show the drag pixmap for the given item. + + :type item: studioqt.Item + :type items: list[studioqt.Item] + + :rtype: QtGui.QPixmap + """ + rect = self.visualRect(self.indexFromItem(item)) + + # pixmap = QtGui.QPixmap() + pixmap = self.grab(rect) + + if len(items) > 1: + cWidth = 35 + cPadding = 5 + cText = str(len(items)) + cX = pixmap.rect().center().x() - float(cWidth / 2) + cY = pixmap.rect().top() + cPadding + cRect = QtCore.QRect(cX, cY, cWidth, cWidth) + + painter = QtGui.QPainter(pixmap) + painter.setRenderHint(QtGui.QPainter.Antialiasing) + + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(self.itemsWidget().backgroundSelectedColor()) + painter.drawEllipse(cRect.center(), float(cWidth / 2), + float(cWidth / 2)) + + font = QtGui.QFont('Serif', 12, QtGui.QFont.Light) + painter.setFont(font) + painter.setPen(self.itemsWidget().textSelectedColor()) + painter.drawText(cRect, QtCore.Qt.AlignCenter, str(cText)) + + return pixmap diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/treewidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/treewidget.py new file mode 100644 index 0000000..61b8fa5 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/itemswidget/treewidget.py @@ -0,0 +1,685 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets +from studiovendor import six + +import studioqt + +from .groupitem import GroupItem +from .itemviewmixin import ItemViewMixin + + +logger = logging.getLogger(__name__) + + +class TreeWidget(ItemViewMixin, QtWidgets.QTreeWidget): + + itemSliderMoved = QtCore.Signal(object, object) + itemSliderReleased = QtCore.Signal(object, object) + + def __init__(self, *args): + QtWidgets.QTreeWidget.__init__(self, *args) + ItemViewMixin.__init__(self) + + self._headerLabels = [] + self._hiddenColumns = {} + + self.setAutoScroll(False) + self.setMouseTracking(True) + self.setSortingEnabled(False) + self.setSelectionMode(QtWidgets.QListWidget.ExtendedSelection) + self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) + + header = self.header() + header.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + header.customContextMenuRequested.connect(self.showHeaderMenu) + + self.itemClicked.connect(self._itemClicked) + self.itemDoubleClicked.connect(self._itemDoubleClicked) + + def _itemSliderMoved(self, item, value): + self.itemSliderMoved.emit(item, value) + + def _itemSliderReleased(self, item, value): + self.itemSliderReleased.emit(item, value) + + def drawRow(self, painter, options, index): + item = self.itemFromIndex(index) + item.paintRow(painter, options, index) + + def settings(self): + """ + Return the current state of the widget. + + :rtype: dict + """ + settings = {} + + # settings["headerState"] = self.header().saveState() + + settings["columnSettings"] = self.columnSettings() + + return settings + + def setSettings(self, settings): + """ + Set the current state of the widget. + + :type settings: dict + :rtype: None + """ + columnSettings = settings.get("columnSettings", {}) + self.setColumnSettings(columnSettings) + + return settings + + def _itemClicked(self, item): + """ + Triggered when the user clicks on an item. + + :type item: QtWidgets.QTreeWidgetItem + :rtype: None + """ + item.clicked() + + def _itemDoubleClicked(self, item): + """ + Triggered when the user double clicks on an item. + + :type item: QtWidgets.QTreeWidgetItem + :rtype: None + """ + item.doubleClicked() + + def clear(self, *args): + """ + Reimplementing so that all dirty objects can be removed. + + :param args: + :rtype: None + """ + QtWidgets.QTreeWidget.clear(self, *args) + self.cleanDirtyObjects() + + def setItems(self, items): + selectedItems = self.selectedItems() + self.takeTopLevelItems() + self.addTopLevelItems(items) + self.setItemsSelected(selectedItems, True) + + def setItemsSelected(self, items, value, scrollTo=True): + """ + Select the given items. + + :type items: list[studioqt.ItemsWidget] + :type value: bool + :type scrollTo: bool + + :rtype: None + """ + for item in items: + item.setSelected(value) + + if scrollTo: + self.itemsWidget().scrollToSelectedItem() + + def selectedItem(self): + """ + Return the last selected non-hidden item. + + :rtype: studioqt.Item + """ + items = self.selectedItems() + + if items: + return items[-1] + + return None + + def selectedItems(self): + """ + Return all the selected items. + + :rtype: list[studioqt.Item] + """ + items = [] + items_ = QtWidgets.QTreeWidget.selectedItems(self) + + for item in items_: + if not isinstance(item, GroupItem): + items.append(item) + + return items + + def rowAt(self, pos): + """ + Return the row for the given pos. + + :type pos: QtCore.QPoint + :rtype: int + """ + item = self.itemAt(pos) + return self.itemRow(item) + + def itemRow(self, item): + """ + Return the row for the given item. + + :type item: studioqt.TreeWidgetItem + :rtype: int + """ + index = self.indexFromItem(item) + return index.row() + + def items(self): + """ + Return a list of all the items in the tree widget. + + :rtype: lsit[studioqt.TreeWidgetItem] + """ + items = [] + + for item in self._items(): + if not isinstance(item, GroupItem): + items.append(item) + + return items + + def _items(self): + """ + Return a list of all the items in the tree widget. + + :rtype: lsit[studioqt.TreeWidgetItem] + """ + return self.findItems( + "*", + QtCore.Qt.MatchWildcard | QtCore.Qt.MatchRecursive + ) + + def takeTopLevelItems(self): + """ + Take all items from the tree widget. + + :rtype: list[QtWidgets.QTreeWidgetItem] + """ + items = [] + for item in self._items(): + # For some reason its faster to take from index 1. + items.append(self.takeTopLevelItem(1)) + items.append(self.takeTopLevelItem(0)) + return items + + def textFromColumn(self, column, split=None, duplicates=False): + """ + Return all the data for the given column + + :type column: int or str + :type split: str + :type duplicates: bool + :rtype: list[str] + """ + items = self.items() + results = self.textFromItems( + items, + column, + split=split, + duplicates=duplicates, + ) + return results + + def textFromItems(self, items, column, split=None, duplicates=False): + """ + Return all the text data for the given items and given column + + :type items: list[Item] + :type column: int or str + :type split: str + :type duplicates: bool + :rtype: list[str] + """ + results = [] + + for item in items: + text = item.text(column) + + if text and split: + results.extend(text.split(split)) + elif text: + results.append(text) + + if not duplicates: + results = list(set(results)) + + return results + + def columnLabels(self): + """ + Return all header labels for the tree widget. + + :rtype: list[str] + """ + return self.headerLabels() + + def labelFromColumn(self, column): + """ + Return the column label for the given column. + + :type column: int + :rtype: str + """ + if column is not None: + return self.headerItem().text(column) + + def headerLabels(self): + """ + Return all the header labels. + + :rtype: str + """ + return self._headerLabels + + def isHeaderLabel(self, label): + """ + Return True if the given label is a valid header label. + + :type label: str + :rtype: None + """ + return label in self._headerLabels + + def _removeDuplicates(self, labels): + """ + Removes duplicates from a list in Python, whilst preserving order. + + :type labels: list[str] + :rtype: list[str] + """ + s = set() + sadd = s.add + return [x for x in labels if x.strip() and not (x in s or sadd(x))] + + def setHeaderLabels(self, labels): + """ + Set the header for each item in the given label list. + + :type labels: list[str] + :rtype: None + """ + labels = self._removeDuplicates(labels) + + if "Custom Order" not in labels: + labels.append("Custom Order") + + self.setColumnHidden("Custom Order", True) + + columnSettings = self.columnSettings() + + QtWidgets.QTreeWidget.setHeaderLabels(self, labels) + + self._headerLabels = labels + self.updateColumnHidden() + + self.setColumnSettings(columnSettings) + + def columnFromLabel(self, label): + """ + Return the column for the given label. + + :type label: str + :rtype: int + """ + try: + return self._headerLabels.index(label) + except ValueError: + return -1 + + def showAllColumns(self): + """ + Show all available columns. + + :rtype: None + """ + for column in range(self.columnCount()): + self.setColumnHidden(column, False) + + def hideAllColumns(self): + """ + Hide all available columns. + + :rtype: None + """ + for column in range(1, self.columnCount()): + self.setColumnHidden(column, True) + + def updateColumnHidden(self): + """ + Update the hidden state for all the current columns. + + :rtype: None + """ + self.showAllColumns() + columnLabels = self._hiddenColumns.keys() + + for columnLabel in columnLabels: + self.setColumnHidden(columnLabel, self._hiddenColumns[columnLabel]) + + def setColumnHidden(self, column, value): + """ + Set the give column to show or hide depending on the specified value. + + :type column: int or str + :type value: bool + :rtype: None + """ + if isinstance(column, six.string_types): + column = self.columnFromLabel(column) + + label = self.labelFromColumn(column) + self._hiddenColumns[label] = value + + QtWidgets.QTreeWidget.setColumnHidden(self, column, value) + + # Make sure the column is not collapsed + width = self.columnWidth(column) + if width < 5: + width = 100 + self.setColumnWidth(column, width) + + def resizeColumnToContents(self, column): + """ + Resize the given column to the data of that column. + + :type column: int or text + :rtype: None + """ + width = 0 + for item in self.items(): + text = item.text(column) + font = item.font(column) + metrics = QtGui.QFontMetricsF(font) + textWidth = metrics.width(text) + item.padding() + width = max(width, textWidth) + + self.setColumnWidth(column, width) + + # ---------------------------------------------------------------------- + # Support for custom orders + # ---------------------------------------------------------------------- + + def isSortByCustomOrder(self): + """ + Return true if items are currently sorted by custom order. + + :rtype: bool + """ + return "Custom Order" in str(self.itemsWidget().dataset().sortBy()) + + def setItemsCustomOrder(self, items, row=1, padding=5): + """ + Set the custom order for the given items by their list order. + + :rtype: None + """ + for item in items: + item.itemData()["Custom Order"] = str(row).zfill(padding) + row += 1 + + # def updateCustomOrder(self): + # """ + # Update any empty custom orders. + # + # :rtype: None + # """ + # row = 1 + # padding = 5 + # + # items = self.items() + # columnLabel = "Custom Order" + # + # for item in items: + # customOrder = item.text(columnLabel) + # + # if not customOrder: + # item.setText(columnLabel, str(row).zfill(padding)) + # row += 1 + + def itemsCustomOrder(self): + """ + Return the items sorted by the custom order data. + + :rtype: list[studioqt.Item] + """ + items = self.items() + + def sortKey(item): + return item.itemData().get("Custom Order", "00000") + + customOrder = sorted(items, key=sortKey) + + return customOrder + + def moveItems(self, items, itemAt): + """ + Move the given items to the position of the destination row. + + :type items: list[studioqt.Item] + :type itemAt: studioqt.Item + :rtype: None + """ + row = 0 + orderedItems = self.itemsCustomOrder() + + if itemAt: + row = orderedItems.index(itemAt) + + removedItems = [] + for item in items: + index = orderedItems.index(item) + removedItems.append(orderedItems.pop(index)) + + for item in removedItems: + orderedItems.insert(row, item) + + self.setItemsCustomOrder(orderedItems) + + for item in items: + item.setSelected(True) + + self.itemsWidget().scrollToSelectedItem() + + # ---------------------------------------------------------------------- + # Support for menus + # ---------------------------------------------------------------------- + + def showHeaderMenu(self, pos): + """ + Creates and show the header menu at the cursor pos. + + :rtype: QtWidgets.QMenu + """ + header = self.header() + column = header.logicalIndexAt(pos) + + menu = self.createHeaderMenu(column) + + menu.addSeparator() + + submenu = self.createHideColumnMenu() + menu.addMenu(submenu) + + point = QtGui.QCursor.pos() + menu.exec_(point) + + def createHeaderMenu(self, column): + """ + Creates a new header menu. + + :rtype: QtWidgets.QMenu + """ + menu = QtWidgets.QMenu(self) + label = self.labelFromColumn(column) + + action = menu.addAction("Hide '{0}'".format(label)) + callback = partial(self.setColumnHidden, column, True) + action.triggered.connect(callback) + + menu.addSeparator() + + action = menu.addAction('Resize to Contents') + callback = partial(self.resizeColumnToContents, column) + action.triggered.connect(callback) + + return menu + + def columnSettings(self): + """ + Return the settings for each column. + + :rtype: dict + """ + columnSettings = {} + + for column in range(self.columnCount()): + + label = self.labelFromColumn(column) + hidden = self.isColumnHidden(column) + width = self.columnWidth(column) + + columnSettings[label] = { + "hidden": hidden, + "width": width, + "index": column, + } + + return columnSettings + + def setColumnSettings(self, settings): + """ + Set the settings for each column. + + :type settings: dict + :type: None + """ + for label in settings: + if self.isHeaderLabel(label): + column = self.columnFromLabel(label) + + width = settings[label].get("width", 100) + if width < 5: + width = 100 + self.setColumnWidth(column, width) + + hidden = settings[label].get("hidden", False) + self.setColumnHidden(column, hidden) + else: + msg = 'Cannot set the column setting for the header label "%s"' + logger.debug(msg, label) + + def createHideColumnMenu(self): + """ + Create the hide column menu. + + :rtype: QtWidgets.QMenu + """ + menu = QtWidgets.QMenu("Show/Hide Column", self) + + action = menu.addAction("Show All") + action.triggered.connect(self.showAllColumns) + + action = menu.addAction("Hide All") + action.triggered.connect(self.hideAllColumns) + + menu.addSeparator() + + for column in range(self.columnCount()): + + label = self.labelFromColumn(column) + isHidden = self.isColumnHidden(column) + + action = menu.addAction(label) + action.setCheckable(True) + action.setChecked(not isHidden) + + callback = partial(self.setColumnHidden, column, not isHidden) + action.triggered.connect(callback) + + return menu + + # ---------------------------------------------------------------------- + # Support for copying item data to the clipboard. + # ---------------------------------------------------------------------- + + def createCopyTextMenu(self): + """ + Create a menu to copy the selected items data to the clipboard. + + :rtype: QtWidgets.QMenu + """ + menu = QtWidgets.QMenu("Copy Text", self) + + if self.selectedItems(): + + for column in range(self.columnCount()): + label = self.labelFromColumn(column) + action = menu.addAction(label) + callback = partial(self.copyText, column) + action.triggered.connect(callback) + + else: + action = menu.addAction("No items selected") + action.setEnabled(False) + + return menu + + def copyText(self, column): + """ + Copy the given column text to clipboard. + + :type column: int or text + :rtype: None + """ + items = self.selectedItems() + text = "\n".join([item.text(column) for item in items]) + + clipBoard = QtWidgets.QApplication.clipboard() + clipBoard.setText(text, QtGui.QClipboard.Clipboard) + + # ---------------------------------------------------------------------- + # Override events for mixin. + # ---------------------------------------------------------------------- + + def mouseMoveEvent(self, event): + """ + Triggered when the user moves the mouse over the current viewport. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + ItemViewMixin.mouseMoveEvent(self, event) + QtWidgets.QTreeWidget.mouseMoveEvent(self, event) + + def mouseReleaseEvent(self, event): + """ + Triggered when the user releases the mouse button on the viewport. + + :type event: QtWidgets.QMouseEvent + :rtype: None + """ + ItemViewMixin.mouseReleaseEvent(self, event) + QtWidgets.QTreeWidget.mouseReleaseEvent(self, event) + diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/librariesmenu.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/librariesmenu.py new file mode 100644 index 0000000..7a02536 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/librariesmenu.py @@ -0,0 +1,67 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +Example: + + from PySide2 import QtGui + import studiolibrary.widgets + menu = studiolibrary.widgets.LibrariesMenu() + point = QtGui.QCursor.pos() + menu.exec_(point) +""" +from functools import partial + +from studiovendor.Qt import QtWidgets + +import studiolibrary + + +class LibrariesMenu(QtWidgets.QMenu): + + def __init__(self, libraryWindow=None): + super(LibrariesMenu, self).__init__(libraryWindow) + + self.setTitle('Libraries') + + libraries = studiolibrary.readSettings() + default = studiolibrary.defaultLibrary() + + for name in libraries: + + library = libraries[name] + + path = library.get('path', '') + kwargs = library.get('kwargs', {}) + + enabled = True + if libraryWindow: + enabled = name != libraryWindow.name() + + text = name + if name == default and name.lower() != "default": + text = name + " (default)" + + action = QtWidgets.QAction(text, self) + action.setEnabled(enabled) + callback = partial(self.showLibrary, name, path, **kwargs) + action.triggered.connect(callback) + self.addAction(action) + + def showLibrary(self, name, path, **kwargs): + """ + Show the library window which has given name and path. + + :type name: str + :type path: str + :type kwargs: dict + """ + studiolibrary.main(name, path, **kwargs) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/lightbox.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/lightbox.py new file mode 100644 index 0000000..5df1694 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/lightbox.py @@ -0,0 +1,228 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt + + +class Lightbox(QtWidgets.QFrame): + + DEFAULT_DURATION = 400 + + def __init__( + self, + parent, + widget=None, + duration=DEFAULT_DURATION, + ): + + super(Lightbox, self).__init__(parent) + self.setObjectName("lightbox") + + self._widget = None + self._accepted = False + self._rejected = False + self._animation = None + self._duration = duration + + layout = QtWidgets.QGridLayout(self) + self.setLayout(layout) + + layout.setRowStretch(0, 1) + layout.setRowStretch(1, 5) + layout.setRowStretch(2, 1) + + layout.setColumnStretch(0, 1) + layout.setColumnStretch(1, 5) + layout.setColumnStretch(2, 1) + + layout.addWidget(QtWidgets.QWidget(), 0, 0) + layout.addWidget(QtWidgets.QWidget(), 0, 1) + layout.addWidget(QtWidgets.QWidget(), 0, 2) + + layout.addWidget(QtWidgets.QWidget(), 1, 0) + layout.addWidget(QtWidgets.QWidget(), 1, 2) + + layout.addWidget(QtWidgets.QWidget(), 2, 0) + layout.addWidget(QtWidgets.QWidget(), 2, 1) + layout.addWidget(QtWidgets.QWidget(), 2, 2) + + if widget: + self.setWidget(widget) + + parent = self.parent() + parent.installEventFilter(self) + + def widget(self): + """ + Get the current widget for the light box. + + :rtype: QtWidgets.QWidget + """ + return self._widget + + def setWidget(self, widget): + """ + Set the widget for the lightbox. + + :type widget: QWidgets.QWidget + """ + if self._widget: + self.layout().removeWidget(self._widget) + + widget.setParent(self) + widget.accept = self.accept + widget.reject = self.reject + + self.layout().addWidget(widget, 1, 1) + + self._widget = widget + + def mousePressEvent(self, event): + """ + Hide the light box if the user clicks on it. + + :type event: QEvent + """ + if not self.widget().underMouse(): + self.reject() + + def eventFilter(self, object, event): + """ + Update the geometry when the parent widget changes size. + + :type object: QtWidget.QWidget + :type event: QtCore.QEvent + :rtype: bool + """ + if event.type() == QtCore.QEvent.Resize: + self.updateGeometry() + + return super(Lightbox, self).eventFilter(object, event) + + def showEvent(self, event): + """ + Fade in the dialog on show. + + :type event: QtCore.QEvent + :rtype: None + """ + self.updateGeometry() + self.fadeIn(self._duration) + + def updateGeometry(self): + """ + Update the geometry to be in the center of it's parent. + + :rtype: None + """ + self.setGeometry(self.parent().geometry()) + self.move(0, 0) + + geometry = self.geometry() + centerPoint = self.geometry().center() + geometry.moveCenter(centerPoint) + geometry.setY(geometry.y()) + + self.move(geometry.topLeft()) + + def fadeIn(self, duration=200): + """ + Fade in the dialog using the opacity effect. + + :type duration: int + :rtype: QtCore.QPropertyAnimation + """ + self._animation = studioqt.fadeIn(self, duration=duration) + return self._animation + + def fadeOut(self, duration=200): + """ + Fade out the dialog using the opacity effect. + + :type duration: int + :rtype: QtCore.QPropertyAnimation + """ + self._animation = studioqt.fadeOut(self, duration=duration) + return self._animation + + def accept(self): + """ + Triggered when the DialogButtonBox has been accepted. + + :rtype: None + """ + if not self._accepted: + self._accepted = True + animation = self.fadeOut(self._duration) + + if animation: + animation.finished.connect(self._acceptAnimationFinished) + else: + self._acceptAnimationFinished() + + def reject(self): + """ + Triggered when the DialogButtonBox has been rejected. + + :rtype: None + """ + if not self._rejected: + self._rejected = True + animation = self.fadeOut(self._duration) + + if animation: + animation.finished.connect(self._rejectAnimationFinished) + else: + self._rejectAnimationFinished() + + def _acceptAnimationFinished(self): + """ + Triggered when the animation has finished on accepted. + + :rtype: None + """ + try: + self.widget().__class__.accept(self.widget()) + finally: + self.close() + + def _rejectAnimationFinished(self): + """ + Triggered when the animation has finished on rejected. + + :rtype: None + """ + try: + self.widget().__class__.reject(self.widget()) + finally: + self.close() + + +def example(): + + widget = QtWidgets.QFrame() + widget.setStyleSheet("border-radius:3px;background-color:white;") + widget.setMinimumWidth(300) + widget.setMinimumHeight(300) + widget.setMaximumWidth(500) + + lightbox = Lightbox() + lightbox.setWidget(widget) + lightbox.show() + + +if __name__ == "__main__": + with studioqt.app(): + w = example() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/lineedit.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/lineedit.py new file mode 100644 index 0000000..b9fa71d --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/lineedit.py @@ -0,0 +1,183 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary + +logger = logging.getLogger(__name__) + + +class LineEdit(QtWidgets.QLineEdit): + + def __init__(self, *args): + QtWidgets.QLineEdit.__init__(self, *args) + + icon = studiolibrary.resource.icon("search.svg") + self._iconButton = QtWidgets.QPushButton(self) + self._iconButton.setObjectName("icon") + self._iconButton.clicked.connect(self._iconClicked) + self._iconButton.setIcon(icon) + self._iconButton.setStyleSheet("QPushButton{background-color: transparent;}") + + icon = studiolibrary.resource.icon("times.svg") + + self._clearButton = QtWidgets.QPushButton(self) + self._clearButton.setObjectName("clear") + self._clearButton.setCursor(QtCore.Qt.ArrowCursor) + self._clearButton.setIcon(icon) + self._clearButton.setToolTip("Clear all search text") + self._clearButton.clicked.connect(self._clearClicked) + self._clearButton.setStyleSheet("QPushButton{background-color: transparent;}") + + self.textChanged.connect(self._textChanged) + + color = studioqt.Color.fromString("rgba(250,250,250,115)") + self.setIconColor(color) + + self.update() + + def update(self): + self.updateIconColor() + self.updateClearButton() + + def _textChanged(self, text): + """ + Triggered when the text changes. + + :type text: str + :rtype: None + """ + self.updateClearButton() + + def _clearClicked(self): + """ + Triggered when the user clicks the cross icon. + + :rtype: None + """ + self.setText("") + self.setFocus() + + def _iconClicked(self): + """ + Triggered when the user clicks on the icon. + + :rtype: None + """ + if not self.hasFocus(): + self.setFocus() + + def updateClearButton(self): + """ + Update the clear button depending on the current text. + + :rtype: None + """ + text = self.text() + if text: + self._clearButton.show() + else: + self._clearButton.hide() + + def contextMenuEvent(self, event): + """ + Triggered when the user right clicks on the search widget. + + :type event: QtCore.QEvent + :rtype: None + """ + self.showContextMenu() + + def setIcon(self, icon): + """ + Set the icon for the search widget. + + :type icon: QtWidgets.QIcon + :rtype: None + """ + self._iconButton.setIcon(icon) + + def setIconColor(self, color): + """ + Set the icon color for the search widget icon. + + :type color: QtGui.QColor + :rtype: None + """ + icon = self._iconButton.icon() + icon = studioqt.Icon(icon) + icon.setColor(color) + self._iconButton.setIcon(icon) + + icon = self._clearButton.icon() + icon = studioqt.Icon(icon) + icon.setColor(color) + self._clearButton.setIcon(icon) + + def updateIconColor(self): + """ + Update the icon colors to the current foregroundRole. + + :rtype: None + """ + color = self.palette().color(self.foregroundRole()) + color = studioqt.Color.fromColor(color) + self.setIconColor(color) + + def settings(self): + """ + Return a dictionary of the current widget state. + + :rtype: dict + """ + settings = { + "text": self.text(), + } + return settings + + def setSettings(self, settings): + """ + Restore the widget state from a settings dictionary. + + :type settings: dict + :rtype: None + """ + text = settings.get("text", "") + self.setText(text) + + def resizeEvent(self, event): + """ + Reimplemented so the icon maintains the same height as the widget. + + :type event: QtWidgets.QResizeEvent + :rtype: None + """ + QtWidgets.QLineEdit.resizeEvent(self, event) + + height = self.height() + size = QtCore.QSize(16, 16) + + self.setTextMargins(20, 0, 0, 0) + + self._iconButton.setIconSize(size) + self._iconButton.setGeometry(0, 0, height, height) + + x = self.width() - height + + self._clearButton.setIconSize(size) + self._clearButton.setGeometry(x, 0, height, height) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/menubarwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/menubarwidget.py new file mode 100644 index 0000000..288905e --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/menubarwidget.py @@ -0,0 +1,274 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging + +from studiovendor import six +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary + + +logger = logging.getLogger(__name__) + + +class MenuBarWidget(QtWidgets.QToolBar): + + DEFAULT_EXPANDED_HEIGHT = 32 + DEFAULT_COLLAPSED_HEIGHT = 10 + ICON_SIZE = 28 + + def __init__(self, parent=None): + QtWidgets.QToolBar.__init__(self, parent) + + self._dpi = 1 + self._isExpanded = True + self._expandHeight = self.DEFAULT_EXPANDED_HEIGHT + self._collapseHeight = self.DEFAULT_COLLAPSED_HEIGHT + + def dpi(self): + """ + Return the zoom multiplier. + + :rtype: float + """ + return self._dpi + + def setDpi(self, dpi): + """ + Set the zoom multiplier. + + Used for high resolution devices. + + :type dpi: float + :rtype: None + """ + self._dpi = dpi + if self.isExpanded(): + self.expand() + else: + self.collapse() + + def mousePressEvent(self, *args): + if not self.isExpanded(): + self.expand() + + def isExpanded(self): + """ + Return True if the menuBarWidget is expanded. + + :rtype: bool + """ + return self._isExpanded + + def expandHeight(self): + """ + Return the height of widget when expanded. + + :rtype: int + """ + return int(self._expandHeight * self.dpi()) + + def collapseHeight(self): + """ + Return the height of widget when collapsed. + + :rtype: int + """ + return int(self._collapseHeight * self.dpi()) + + def setFixedHeight(self, value): + """ + Overriding this method to also set the height for all child widgets. + + :type value: bool + :rtype: None + """ + self.setChildrenHeight(value) + QtWidgets.QToolBar.setFixedHeight(self, value) + + def setChildrenHidden(self, value): + """ + Set all child widgets to hidden. + + :type value: bool + :rtype: None + """ + for w in self.widgets(): + w.setHidden(value) + + def setChildrenHeight(self, height): + """ + Set the height of all the child widgets to the given height. + + :type height: int + :rtype: None + """ + for w in self.widgets(): + w.setFixedHeight(height) + + def expand(self): + """ + Expand the MenuBar to the expandHeight. + + :rtype: None + """ + self._isExpanded = True + height = self.expandHeight() + self.setFixedHeight(height) + self.setChildrenHidden(False) + + def collapse(self): + """ + Collapse the MenuBar to the collapseHeight. + + :rtype: None + """ + self._isExpanded = False + height = self.collapseHeight() + self.setFixedHeight(height) + self.setChildrenHeight(0) + self.setChildrenHidden(True) + + def updateIconColor(self): + color = self.palette().color(self.foregroundRole()) + color = studioqt.Color.fromColor(color) + + for action in self.actions(): + + icon = studioqt.Icon(action.icon()) + + try: + icon.setBadgeColor(action._badgeColor) + icon.setBadgeEnabled(action._badgeEnabled) + except AttributeError as error: + pass + + icon.setColor(color) + action.setIcon(icon) + + def widgets(self): + """ + Return all the widget that are a child of the MenuBarWidget. + + :rtype: list[QtWidgets.QWidget] + """ + widgets = [] + + for i in range(0, self.layout().count()): + w = self.layout().itemAt(i).widget() + if isinstance(w, QtWidgets.QWidget): + widgets.append(w) + + return widgets + + def actions(self): + """ + Return all the actions that are a child of the MenuBarWidget. + + :rtype: list[QtWidgets.QAction] + """ + actions = [] + + for child in self.children(): + if isinstance(child, QtWidgets.QAction): + actions.append(child) + + return actions + + def findAction(self, text): + """ + Find the action with the given text. + + :rtype: QtWidgets.QAction or None + """ + for child in self.children(): + if isinstance(child, QtWidgets.QAction): + if child.text() == text: + return child + + def findToolButton(self, text): + """ + Find the QToolButton with the given text. + + :rtype: QtWidgets.QToolButton or None + """ + for child in self.children(): + if isinstance(child, QtWidgets.QAction): + if child.text() == text: + return self.widgetForAction(child) + + def insertAction(self, before, action): + """ + Overriding this method to support the before argument as string. + + :type before: QtWidgets.QAction or str + :type action: QtWidgets.QAction + :rtype: QtWidgets.QAction + """ + action.setParent(self) + + if isinstance(before, six.string_types): + before = self.findAction(before) + + action = QtWidgets.QToolBar.insertAction(self, before, action) + + return action + + +def showExample(): + """ + Run a simple example of the widget. + + :rtype: QtWidgets.QWidget + """ + + with studioqt.app(): + + menuBarWidget = MenuBarWidget(None) + + def setIconColor(): + menuBarWidget.setIconColor(QtGui.QColor(255, 255, 0)) + + def collapse(): + menuBarWidget.collapse() + + menuBarWidget.show() + + action = menuBarWidget.addAction("Collapse") + action.triggered.connect(collapse) + + w = QtWidgets.QLineEdit() + menuBarWidget.addWidget(w) + + icon = studiolibrary.resource.icon("add") + menuBarWidget.addAction(icon, "Plus") + menuBarWidget.setStyleSheet(""" +background-color: rgb(0,200,100); +spacing:5px; + """) + + menuBarWidget.setChildrenHeight(50) + + action = QtWidgets.QAction("Yellow", None) + action.triggered.connect(setIconColor) + menuBarWidget.insertAction("Plus", action) + menuBarWidget.setGeometry(400, 400, 400, 100) + + menuBarWidget.expand() + + +if __name__ == "__main__": + showExample() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/messagebox.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/messagebox.py new file mode 100644 index 0000000..392cd21 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/messagebox.py @@ -0,0 +1,778 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from .themesmenu import Theme + +from studiovendor import six +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary + +from . import settings + + +def createMessageBox( + parent, + title, + text, + width=None, + height=None, + buttons=None, + headerIcon=None, + headerColor=None, + enableInputEdit=False, + enableDontShowCheckBox=False +): + """ + Open a question message box with the given options. + + :type parent: QWidget + :type title: str + :type text: str + :type buttons: list[QMessageBox.StandardButton] + :type headerIcon: str + :type headerColor: str + :type enableDontShowCheckBox: bool + + :rtype: MessageBox + """ + mb = MessageBox( + parent, + width=width, + height=height, + enableInputEdit=enableInputEdit, + enableDontShowCheckBox=enableDontShowCheckBox + ) + + mb.setText(text) + + buttons = buttons or [QtWidgets.QDialogButtonBox.Ok] + mb.setButtons(buttons) + + if headerIcon: + p = studiolibrary.resource.pixmap(headerIcon) + mb.setPixmap(p) + + try: + theme = parent.theme() + except AttributeError: + theme = Theme() + + mb.setStyleSheet(theme.styleSheet()) + + headerColor = headerColor or theme.accentColor().toString() + headerColor = headerColor or "rgb(50, 150, 200)" + + mb.setHeaderColor(headerColor) + + mb.setWindowTitle(title) + mb.setTitleText(title) + + return mb + + +def showMessageBox( + parent, + title, + text, + width=None, + height=None, + buttons=None, + headerIcon=None, + headerColor=None, + enableDontShowCheckBox=False, + force=False +): + """ + Open a question message box with the given options. + + :type parent: QWidget + :type title: str + :type text: str + :type buttons: list[QMessageBox.StandardButton] + :type headerIcon: str + :type headerColor: str + :type enableDontShowCheckBox: bool + :type force: bool + + :rtype: MessageBox + """ + key = '{0}MessageBox'.format(title.replace(" ", "")) + data = settings.get(key, {}) + + clickedButton = data.get("clickedButton", -1) + dontShowAgain = data.get("dontShowAgain", False) + + # Force show the dialog if the user is holding the ctrl key down + if studioqt.isControlModifier() or studioqt.isAltModifier(): + force = True + + if force or not dontShowAgain or not enableDontShowCheckBox: + + mb = createMessageBox( + parent, + title, + text, + width=width, + height=height, + buttons=buttons, + headerIcon=headerIcon, + headerColor=headerColor, + enableDontShowCheckBox=enableDontShowCheckBox + ) + + mb.exec_() + mb.close() + + clickedButton = mb.clickedStandardButton() + if clickedButton != QtWidgets.QDialogButtonBox.Cancel: + + # Save the button that was clicked by the user + settings.set(key, + { + "clickedButton": mb.clickedIndex(), + "dontShowAgain": bool(mb.isDontShowCheckboxChecked()), + } + ) + + return clickedButton + + +class MessageBox(QtWidgets.QDialog): + + @staticmethod + def input( + parent, + title, + text, + inputText="", + width=None, + height=None, + buttons=None, + headerIcon=None, + headerColor=None, + ): + """ + Convenience dialog to get a single text value from the user. + + :type parent: QWidget + :type title: str + :type text: str + :type width: int + :type height: int + :type buttons: list[QMessageBox.StandardButton] + :type headerIcon: str + :type headerColor: str + :rtype: QMessageBox.StandardButton + """ + buttons = buttons or [ + QtWidgets.QDialogButtonBox.Ok, + QtWidgets.QDialogButtonBox.Cancel + ] + + dialog = createMessageBox( + parent, + title, + text, + width=width, + height=height, + buttons=buttons, + headerIcon=headerIcon, + headerColor=headerColor, + enableInputEdit=True, + ) + + dialog.setInputText(inputText) + dialog.exec_() + + return dialog.inputText(), dialog.clickedText() + + @staticmethod + def question( + parent, + title, + text, + width=None, + height=None, + buttons=None, + headerIcon=None, + headerColor=None, + enableDontShowCheckBox=False + ): + """ + Open a question message box with the given options. + + :type parent: QWidget + :type title: str + :type text: str + :type headerIcon: str + :type headerColor: str + :type buttons: list[QMessageBox.StandardButton] + + :rtype: QMessageBox.StandardButton + """ + buttons = buttons or [ + QtWidgets.QDialogButtonBox.Yes, + QtWidgets.QDialogButtonBox.No, + QtWidgets.QDialogButtonBox.Cancel + ] + + clickedButton = showMessageBox( + parent, + title, + text, + width=width, + height=height, + buttons=buttons, + headerIcon=headerIcon, + headerColor=headerColor, + enableDontShowCheckBox=enableDontShowCheckBox, + ) + + return clickedButton + + @staticmethod + def warning( + parent, + title, + text, + width=None, + height=None, + buttons=None, + headerIcon=None, + headerColor="rgb(250, 160, 0)", + enableDontShowCheckBox=False, + force=False, + ): + """ + Open a warning message box with the given options. + + :type parent: QWidget + :type title: str + :type text: str + :type buttons: list[QMessageBox.StandardButton] + :type headerIcon: str + :type headerColor: str + :type enableDontShowCheckBox: bool + :type force: bool + + :rtype: (QMessageBox.StandardButton, bool) + """ + buttons = buttons or [ + QtWidgets.QDialogButtonBox.Yes, + QtWidgets.QDialogButtonBox.No + ] + + clickedButton = showMessageBox( + parent, + title, + text, + width=width, + height=height, + buttons=buttons, + headerIcon=headerIcon, + headerColor=headerColor, + enableDontShowCheckBox=enableDontShowCheckBox, + force=force + ) + + return clickedButton + + @staticmethod + def critical( + parent, + title, + text, + width=None, + height=None, + buttons=None, + headerIcon=None, + headerColor="rgb(230, 80, 80)" + ): + """ + Open a critical message box with the given options. + + :type parent: QWidget + :type title: str + :type text: str + :type headerIcon: str + :type headerColor: str + :type buttons: list[QMessageBox.StandardButton] + + :rtype: QMessageBox.StandardButton + """ + buttons = buttons or [QtWidgets.QDialogButtonBox.Ok] + + clickedButton = showMessageBox( + parent, + title, + text, + width=width, + height=height, + buttons=buttons, + headerIcon=headerIcon, + headerColor=headerColor + ) + + return clickedButton + + def __init__( + self, + parent=None, + width=None, + height=None, + enableInputEdit=False, + enableDontShowCheckBox=False + ): + super(MessageBox, self).__init__(parent) + self.setObjectName("messageBox") + + self._frame = None + self._animation = None + self._dontShowCheckbox = False + self._clickedButton = None + self._clickedStandardButton = None + + if width: + self.setMinimumWidth(width) + + if height: + self.setMinimumHeight(height) + + parent = self.parent() + + if parent: + parent.installEventFilter(self) + self._frame = QtWidgets.QFrame(parent) + self._frame.setObjectName("messageBoxFrame") + self._frame.show() + self.setParent(self._frame) + + self._header = QtWidgets.QFrame(self) + self._header.setObjectName("messageBoxHeaderFrame") + self._header.setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Fixed) + + self._icon = QtWidgets.QLabel(self._header) + self._icon.setObjectName("messageBoxIcon") + self._icon.hide() + self._icon.setScaledContents(True) + self._icon.setAlignment(QtCore.Qt.AlignTop) + self._icon.setSizePolicy(QtWidgets.QSizePolicy.Preferred, + QtWidgets.QSizePolicy.Preferred) + + self._title = QtWidgets.QLabel(self._header) + self._title.setObjectName("messageBoxHeaderLabel") + self._title.setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Expanding) + + hlayout = QtWidgets.QHBoxLayout() + hlayout.setContentsMargins(15, 7, 15, 10) + hlayout.setSpacing(10) + hlayout.addWidget(self._icon) + hlayout.addWidget(self._title) + + self._header.setLayout(hlayout) + + bodyLayout = QtWidgets.QVBoxLayout() + + self._body = QtWidgets.QFrame(self) + self._body.setObjectName("messageBoxBody") + self._body.setLayout(bodyLayout) + + self._message = QtWidgets.QLabel(self._body) + self._message.setWordWrap(True) + self._message.setMinimumHeight(15) + self._message.setAlignment(QtCore.Qt.AlignLeft) + self._message.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) + self._message.setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Expanding) + + bodyLayout.addWidget(self._message) + bodyLayout.setContentsMargins(15, 15, 15, 15) + + if enableInputEdit: + self._inputEdit = QtWidgets.QLineEdit(self._body) + self._inputEdit.setObjectName("messageBoxInputEdit") + self._inputEdit.setFocus() + + bodyLayout.addStretch(1) + bodyLayout.addWidget(self._inputEdit) + bodyLayout.addStretch(10) + + if enableDontShowCheckBox: + msg = "Don't show this message again" + self._dontShowCheckbox = QtWidgets.QCheckBox(msg, self._body) + + bodyLayout.addStretch(10) + bodyLayout.addWidget(self._dontShowCheckbox) + bodyLayout.addStretch(2) + + self._buttonBox = QtWidgets.QDialogButtonBox(None, QtCore.Qt.Horizontal, self) + self._buttonBox.clicked.connect(self._clicked) + self._buttonBox.accepted.connect(self._accept) + self._buttonBox.rejected.connect(self._reject) + + vlayout1 = QtWidgets.QVBoxLayout() + vlayout1.setContentsMargins(0, 0, 0, 0) + + vlayout1.addWidget(self._header) + vlayout1.addWidget(self._body) + bodyLayout.addWidget(self._buttonBox) + + self.setLayout(vlayout1) + self.updateGeometry() + + def buttonBox(self): + """ + Return the button box widget for the dialog. + + :rtype: QtGui.QDialogButtonBox + """ + return self._buttonBox + + def addButton(self, *args): + """Create a push button with the given text and role""" + self.buttonBox().addButton(*args) + + def eventFilter(self, object, event): + """ + Update the geometry when the parent widget changes size. + + :type object: QtWidget.QWidget + :type event: QtCore.QEvent + :rtype: bool + """ + if event.type() == QtCore.QEvent.Resize: + self.updateGeometry() + return super(MessageBox, self).eventFilter(object, event) + + def showEvent(self, event): + """ + Fade in the dialog on show. + + :type event: QtCore.QEvent + :rtype: None + """ + self.updateGeometry() + self.fadeIn() + + def updateGeometry(self): + """ + Update the geometry to be in the center of it's parent. + + :rtype: None + """ + frame = self._frame + + if frame: + frame.setGeometry(self._frame.parent().geometry()) + frame.move(0, 0) + + geometry = self.geometry() + centerPoint = frame.geometry().center() + geometry.moveCenter(centerPoint) + geometry.setY(geometry.y() - 50) + self.move(geometry.topLeft()) + + def fadeIn(self, duration=400): + """ + Fade in the dialog using the opacity effect. + + :type duration: int + :rtype: QtCore.QPropertyAnimation + """ + if self._frame: + self._animation = studioqt.fadeIn(self._frame, duration=duration) + return self._animation + + def fadeOut(self, duration=400): + """ + Fade out the dialog using the opacity effect. + + :type duration: int + :rtype: QtCore.QPropertyAnimation + """ + if self._frame: + self._animation = studioqt.fadeOut(self._frame, duration=duration) + return self._animation + + def _accept(self): + """ + Triggered when the DialogButtonBox has been accepted. + + :rtype: None + """ + animation = self.fadeOut() + + if animation: + animation.finished.connect(self._acceptAnimationFinished) + else: + self._acceptAnimationFinished() + + def _reject(self): + """ + Triggered when the DialogButtonBox has been rejected. + + :rtype: None + """ + animation = self.fadeOut() + + if animation: + animation.finished.connect(self._rejectAnimationFinished) + else: + self._rejectAnimationFinished() + + def _acceptAnimationFinished(self): + """ + Triggered when the animation has finished on accepted. + + :rtype: None + """ + parent = self._frame or self + parent.close() + self.accept() + + def _rejectAnimationFinished(self): + """ + Triggered when the animation has finished on rejected. + + :rtype: None + """ + parent = self._frame or self + parent.close() + self.reject() + + def header(self): + """ + Return the header frame. + + :rtype: QtWidgets.QFrame + """ + return self._header + + def setTitleText(self, text): + """ + Set the title text to be displayed. + + :type text: str + :rtype: None + """ + self._title.setText(text) + + def setText(self, text): + """ + Set the text message to be displayed. + + :type text: str + :rtype: None + """ + text = six.text_type(text) + self._message.setText(text) + + def inputText(self): + """ + Return the text that the user has given the input edit. + + :rtype: str + """ + return self._inputEdit.text() + + def setInputText(self, text): + """ + Set the input text. + + :type text: str + """ + self._inputEdit.setText(text) + + def setButtons(self, buttons): + """ + Set the buttons to be displayed in message box. + + :type buttons: QMessageBox.StandardButton + :rtype: None + """ + for button in buttons: + if isinstance(button, list) or isinstance(button, tuple): + self.buttonBox().addButton(button[0], button[1]) + else: + self.buttonBox().addButton(button) + + def setHeaderColor(self, color): + """ + Set the header color for the message box. + + :type color: str + :rtype: None + """ + self.header().setStyleSheet("background-color:" + color) + + def setPixmap(self, pixmap): + """ + Set the pixmap for the message box. + + :type pixmap: QWidgets.QPixmap + :rtype: None + """ + self._icon.setPixmap(pixmap) + self._icon.show() + + def _clicked(self, button): + """ + Triggered when the user clicks a button. + + :type button: QWidgets.QPushButton + :rtype: None + """ + self._clickedButton = button + self._clickedStandardButton = self.buttonBox().standardButton(button) + + def clickedIndex(self): + """ + Return the button that was clicked by its index. + + :rtype: int or None + """ + for i, button in enumerate(self.buttonBox().buttons()): + if button == self.clickedButton(): + return i + + def clickedButton(self): + """ + Return the button that was clicked. + + :rtype: QtWidgets.QPushButton or None + """ + return self._clickedButton + + def clickedText(self): + return self._clickedButton.text() + + def clickedStandardButton(self): + """ + Return the button that was clicked by the user. + + :rtype: QMessageBox.StandardButton or None + """ + return self._clickedStandardButton + + def isDontShowCheckboxChecked(self): + """ + Return the checked state of the Dont show again checkbox. + + :rtype: bool + """ + if self._dontShowCheckbox: + return self._dontShowCheckbox.isChecked() + else: + return False + + def exec_(self): + """ + Shows the dialog as a modal dialog + + :rtype: int or None + """ + QtWidgets.QDialog.exec_(self) + return self.clickedIndex() + + +def testMessageBox(): + + with studioqt.app(): + + title = "Test question dialog" + text = "Would you like to create a snapshot icon?" + + buttons = [ + QtWidgets.QDialogButtonBox.Yes, + QtWidgets.QDialogButtonBox.Ignore, + QtWidgets.QDialogButtonBox.Cancel + ] + + result = MessageBox.question(None, title, text, buttons=buttons) + print(result) + + title = "Test long text message" + text = "This is to test a very long message. " \ + "This is to test a very long message. " \ + "This is to test a very long message. " \ + "This is to test a very long message. " \ + "This is to test a very long message. " + + buttons = [ + QtWidgets.QDialogButtonBox.Yes, + QtWidgets.QDialogButtonBox.Ignore, + QtWidgets.QDialogButtonBox.Cancel + ] + + result = MessageBox.question(None, title, text, buttons=buttons) + print(result) + + title = "Test checkbox" + text = "Testing the don't show check box. " + + buttons = [ + QtWidgets.QDialogButtonBox.Ok, + QtWidgets.QDialogButtonBox.Cancel + ] + + print(studiolibrary.widgets.MessageBox.input( + None, + "Rename", + "Rename the selected item?", + inputText="face.anim", + )) + + result = MessageBox.question( + None, + title, + text, + buttons=buttons, + enableDontShowCheckBox=True + ) + print(result) + + title = "Create a new thumbnail icon" + text = "This will override the existing thumbnail. " \ + "Are you sure you would like to continue?" + + buttons = [ + QtWidgets.QDialogButtonBox.Yes, + QtWidgets.QDialogButtonBox.No + ] + + result = MessageBox.warning( + None, + title, + text, + buttons=buttons, + enableDontShowCheckBox=True + ) + print(result) + + title = "Error saving item!" + text = "An error has occurred while saving an item." + result = MessageBox.critical(None, title, text) + print(result) + + if result == QtWidgets.QDialogButtonBox.Yes: + title = "Error while saving!" + text = "There was an error while saving" + MessageBox.critical(None, title, text) + + +if __name__ == "__main__": + testMessageBox() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/placeholderwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/placeholderwidget.py new file mode 100644 index 0000000..4b88ab9 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/placeholderwidget.py @@ -0,0 +1,22 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtWidgets + +import studioqt + + +class PlaceholderWidget(QtWidgets.QWidget): + + def __init__(self, *args): + QtWidgets.QWidget.__init__(self, *args) + studioqt.loadUi(self) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/previewwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/previewwidget.py new file mode 100644 index 0000000..88b9a66 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/previewwidget.py @@ -0,0 +1,213 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary.widgets + + +class PreviewWidget(QtWidgets.QWidget): + + def __init__(self, item, *args): + QtWidgets.QWidget.__init__(self, *args) + studioqt.loadUi(self) + + self._item = item + + widget = self.createTitleWidget() + widget.ui.menuButton.clicked.connect(self.showMenu) + + self.ui.titleFrame.layout().addWidget(widget) + + iconGroupBoxWidget = studiolibrary.widgets.GroupBoxWidget("Icon", self.ui.iconGroup) + iconGroupBoxWidget.setObjectName("iconGroupBoxWidget") + iconGroupBoxWidget.setPersistent(True) + self.ui.iconTitleFrame.layout().addWidget(iconGroupBoxWidget) + + schema = item.loadSchema() + if schema: + self._formWidget = studiolibrary.widgets.FormWidget(self) + self._formWidget.setObjectName(item.__class__.__name__ + "Form") + self._formWidget.setSchema(item.loadSchema()) + self._formWidget.setValidator(self.validator) + + self.ui.formFrame.layout().addWidget(self._formWidget) + + self.ui.acceptButton.hide() + self.ui.acceptButton.setText("Load") + self.ui.acceptButton.clicked.connect(self.accept) + + self.createSequenceWidget() + + self._item.dataChanged.connect(self._itemDataChanged) + + self.updateThumbnailSize() + + def item(self): + """ + Get the current item in preview. + + :rtype: studiolibrary.LibraryItem + """ + return self._item + + def showMenu(self): + """ + Show the edit menu at the current cursor position. + + :rtype: QtWidgets.QAction + """ + menu = QtWidgets.QMenu(self) + + self.item().contextEditMenu(menu) + + point = QtGui.QCursor.pos() + point.setX(point.x() + 3) + point.setY(point.y() + 3) + + return menu.exec_(point) + + def createTitleWidget(self): + """ + Create a new instance of the title bar widget. + + :rtype: QtWidgets.QFrame + """ + class UI(object): + """Proxy class for attaching ui widgets as properties.""" + pass + + titleWidget = QtWidgets.QFrame(self) + titleWidget.setObjectName("titleWidget") + titleWidget.ui = UI() + + vlayout = QtWidgets.QVBoxLayout() + vlayout.setSpacing(0) + vlayout.setContentsMargins(0, 0, 0, 0) + + hlayout = QtWidgets.QHBoxLayout() + hlayout.setSpacing(0) + hlayout.setContentsMargins(0, 0, 0, 0) + + vlayout.addLayout(hlayout) + + titleButton = QtWidgets.QLabel(self) + titleButton.setText(self.item().NAME) + titleButton.setObjectName("titleButton") + titleWidget.ui.titleButton = titleButton + + hlayout.addWidget(titleButton) + + menuButton = QtWidgets.QPushButton(self) + menuButton.setText("...") + menuButton.setObjectName("menuButton") + titleWidget.ui.menuButton = menuButton + + hlayout.addWidget(menuButton) + + titleWidget.setLayout(vlayout) + + return titleWidget + + def _itemDataChanged(self, *args, **kwargs): + """ + Triggered when the current item data changes. + + :type args: list + :type kwargs: dict + """ + self.updateIcon() + + def setTitle(self, title): + """ + Set the title of the preview widget. + + :type title: str + """ + self.ui.titleLabel.setText(title) + + def validator(self, **kwargs): + """ + Validator used for validating the load arguments. + + :type kwargs: dict + """ + self._item.loadValidator(**kwargs) + self.updateIcon() + + def createSequenceWidget(self): + """ + Create a sequence widget to replace the static thumbnail widget. + + :rtype: None + """ + self.ui.sequenceWidget = studiolibrary.widgets.ImageSequenceWidget(self.ui.iconFrame) + + self.ui.iconFrame.layout().insertWidget(0, self.ui.sequenceWidget) + + self.updateIcon() + + def updateIcon(self): + """Update the thumbnail icon.""" + icon = self._item.thumbnailIcon() + if icon: + self.ui.sequenceWidget.setIcon(icon) + + if self._item.imageSequencePath(): + self.ui.sequenceWidget.setDirname(self.item().imageSequencePath()) + + def close(self): + """ + Overriding the close method so save the persistent data. + + :rtype: None + """ + if self._formWidget: + self._formWidget.savePersistentValues() + QtWidgets.QWidget.close(self) + + def resizeEvent(self, event): + """ + Overriding to adjust the image size when the widget changes size. + + :type event: QtCore.QSizeEvent + """ + self.updateThumbnailSize() + + def updateThumbnailSize(self): + """ + Update the thumbnail button to the size of the widget. + + :rtype: None + """ + width = self.width() - 5 + if width > 150: + width = 150 + + size = QtCore.QSize(width, width) + + self.ui.iconFrame.setMaximumSize(size) + self.ui.iconGroup.setMaximumHeight(width) + + self.ui.sequenceWidget.setIconSize(size) + self.ui.sequenceWidget.setMinimumSize(size) + self.ui.sequenceWidget.setMaximumSize(size) + + def accept(self): + """Called when the user clicks the load button.""" + kwargs = self._formWidget.values() + self._item.load(**kwargs) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/searchwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/searchwidget.py new file mode 100644 index 0000000..6a73661 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/searchwidget.py @@ -0,0 +1,356 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import logging +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary + +logger = logging.getLogger(__name__) + + +class SearchWidget(QtWidgets.QLineEdit): + + SPACE_OPERATOR = "and" + PLACEHOLDER_TEXT = "Search" + + searchChanged = QtCore.Signal() + + def __init__(self, *args): + QtWidgets.QLineEdit.__init__(self, *args) + + self._dataset = None + self._spaceOperator = "and" + self._iconButton = QtWidgets.QPushButton(self) + self._iconButton.setObjectName("searchIconWidget") + self._iconButton.clicked.connect(self._iconClicked) + + icon = studiolibrary.resource.icon("magnifying-glass.svg") + self.setIcon(icon) + + self._clearButton = QtWidgets.QPushButton(self) + self._clearButton.setCursor(QtCore.Qt.ArrowCursor) + icon = studiolibrary.resource.icon("xmark") + self._clearButton.setIcon(icon) + self._clearButton.setToolTip("Clear all search text") + self._clearButton.clicked.connect(self._clearClicked) + self._clearButton.setStyleSheet("QFrame {background-color: transparent;}") + + self.setPlaceholderText(self.PLACEHOLDER_TEXT) + self.textChanged.connect(self._textChanged) + + self.update() + + def update(self): + self.updateIconColor() + self.updateClearButton() + + def setDataset(self, dataset): + """ + Set the data set for the search widget: + + :type dataset: studiolibrary.Dataset + """ + self._dataset = dataset + + def dataset(self): + """ + Get the data set for the search widget. + + :rtype: studiolibrary.Dataset + """ + return self._dataset + + def _clearClicked(self): + """ + Triggered when the user clicks the cross icon. + + :rtype: None + """ + self.setText("") + self.setFocus() + + def _iconClicked(self): + """ + Triggered when the user clicks on the icon. + + :rtype: None + """ + if not self.hasFocus(): + self.setFocus() + + def _textChanged(self, text): + """ + Triggered when the text changes. + + :type text: str + :rtype: None + """ + self.search() + + def search(self): + """Run the search query on the data set.""" + if self.dataset(): + self.dataset().addQuery(self.query()) + self.dataset().search() + else: + logger.info("No dataset found the the search widget.") + + self.updateClearButton() + self.searchChanged.emit() + + def query(self): + """ + Get the query used for the data set. + + :rtype: dict + """ + text = str(self.text()) + + filters = [] + for filter_ in text.split(' '): + if filter_.split(): + filters.append(('*', 'contains', filter_)) + + uniqueName = 'searchwidget' + str(id(self)) + + return { + 'name': uniqueName, + 'operator': self.spaceOperator(), + 'filters': filters + } + + def updateClearButton(self): + """ + Update the clear button depending on the current text. + + :rtype: None + """ + text = self.text() + if text: + self._clearButton.show() + else: + self._clearButton.hide() + + self.setProperty('hasText', bool(self.text())) + self.setStyleSheet(self.styleSheet()) + + def contextMenuEvent(self, event): + """ + Triggered when the user right clicks on the search widget. + + :type event: QtCore.QEvent + :rtype: None + """ + self.showContextMenu() + + def spaceOperator(self): + """ + Get the space operator for the search widget. + + :rtype: str + """ + return self._spaceOperator + + def setSpaceOperator(self, operator): + """ + Set the space operator for the search widget. + + :type operator: str + """ + self._spaceOperator = operator + self.search() + + def createSpaceOperatorMenu(self, parent=None): + """ + Return the menu for changing the space operator. + + :type parent: QGui.QMenu + :rtype: QGui.QMenu + """ + menu = QtWidgets.QMenu(parent) + menu.setTitle("Space Operator") + + # Create the space operator for the OR operator + action = QtWidgets.QAction(menu) + action.setText("OR") + action.setCheckable(True) + + callback = partial(self.setSpaceOperator, "or") + action.triggered.connect(callback) + + if self.spaceOperator() == "or": + action.setChecked(True) + + menu.addAction(action) + + # Create the space operator for the AND operator + action = QtWidgets.QAction(menu) + action.setText("AND") + action.setCheckable(True) + + callback = partial(self.setSpaceOperator, "and") + action.triggered.connect(callback) + + if self.spaceOperator() == "and": + action.setChecked(True) + + menu.addAction(action) + + return menu + + def showContextMenu(self): + """ + Create and show the context menu for the search widget. + + :rtype QtWidgets.QAction + """ + menu = QtWidgets.QMenu(self) + + # Adding a blank icon fixes the text alignment issue when using Qt 5.12.+ + icon = studiolibrary.resource.icon("blank") + + subMenu = self.createStandardContextMenu() + subMenu.setTitle("Edit") + subMenu.setIcon(icon) + + menu.addMenu(subMenu) + + subMenu = self.createSpaceOperatorMenu(menu) + menu.addMenu(subMenu) + + point = QtGui.QCursor.pos() + action = menu.exec_(point) + + return action + + def setIcon(self, icon): + """ + Set the icon for the search widget. + + :type icon: QtWidgets.QIcon + :rtype: None + """ + self._iconButton.setIcon(icon) + + def setIconColor(self, color): + """ + Set the icon color for the search widget icon. + + :type color: QtGui.QColor + :rtype: None + """ + icon = self._iconButton.icon() + icon = studioqt.Icon(icon) + icon.setColor(color) + self._iconButton.setIcon(icon) + + icon = self._clearButton.icon() + icon = studioqt.Icon(icon) + icon.setColor(color) + self._clearButton.setIcon(icon) + + def updateIconColor(self): + """ + Update the icon colors to the current foregroundRole. + + :rtype: None + """ + color = self.palette().color(self.foregroundRole()) + color = studioqt.Color.fromColor(color) + self.setIconColor(color) + + def settings(self): + """ + Return a dictionary of the current widget state. + + :rtype: dict + """ + settings = { + "text": self.text(), + "spaceOperator": self.spaceOperator(), + } + return settings + + def setSettings(self, settings): + """ + Restore the widget state from a settings dictionary. + + :type settings: dict + :rtype: None + """ + text = settings.get("text", "") + self.setText(text) + + spaceOperator = settings.get("spaceOperator") + if spaceOperator: + self.setSpaceOperator(spaceOperator) + + def resizeEvent(self, event): + """ + Reimplemented so the icon maintains the same height as the widget. + + :type event: QtWidgets.QResizeEvent + :rtype: None + """ + QtWidgets.QLineEdit.resizeEvent(self, event) + + self.setTextMargins(self.height(), 0, 0, 0) + size = QtCore.QSize(self.height(), self.height()) + + self._iconButton.setFixedSize(size) + + x = self.width() - self.height() + self._clearButton.setGeometry(x, 0, self.height(), self.height()) + + +def showExample(): + """ + Run a simple example of the search widget. + + :rtype: SearchWidget + """ + + with studioqt.app(): + + def searchFinished(): + print('-' * 25) + print('Found: {}'.format(len(dataset.results()))) + + for data in dataset.results(): + print('Match:', data) + + data = [ + {'text': 'This is a dog'}, + {'text': 'I love cats'}, + {'text': 'How man eggs can you eat?'}, + ] + + dataset = studiolibrary.Dataset() + dataset.setData(data) + dataset.searchFinished.connect(searchFinished) + + widget = SearchWidget() + widget.setDataset(dataset) + widget.show() + + return widget + + + +if __name__ == '__main__': + showExample() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/separatoraction.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/separatoraction.py new file mode 100644 index 0000000..50934d5 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/separatoraction.py @@ -0,0 +1,93 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtWidgets + + +__all__ = ["SeparatorAction"] + + +class Line(QtWidgets.QFrame): + pass + + +class SeparatorWidgetAction(QtWidgets.QFrame): + pass + + +class SeparatorAction(QtWidgets.QWidgetAction): + + def __init__(self, label="", parent=None): + """ + :type parent: QtWidgets.QMenu + """ + QtWidgets.QWidgetAction.__init__(self, parent) + + self._widget = SeparatorWidgetAction(parent) + + self._label = QtWidgets.QLabel(self._widget) + self._label.setText(label) + + self._line = Line(self._widget) + self._line.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Expanding + ) + + def setText(self, text): + """ + Set the text of the separator. + + :type text: str + :rtype: None + """ + self.label().setText(text) + + def widget(self): + """ + Return the QFrame object. + + :rtype: Frame + """ + return self._widget + + def label(self): + """ + Return the QLabel object. + + :rtype: QtWidgets.QLabel + """ + return self._label + + def line(self): + """ + Return the line widget. + + :rtype: Line + """ + return self._line + + def createWidget(self, menu): + """ + This method is called by the QWidgetAction base class. + + :type menu: QtWidgets.QMenu + """ + actionWidget = self.widget() + + actionLayout = QtWidgets.QHBoxLayout() + actionLayout.setContentsMargins(0, 0, 0, 0) + actionLayout.addWidget(self.label()) + actionLayout.addWidget(self.line()) + actionWidget.setLayout(actionLayout) + + return actionWidget diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sequencewidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sequencewidget.py new file mode 100644 index 0000000..40577e4 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sequencewidget.py @@ -0,0 +1,308 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +from studioqt import ImageSequence +import studioqt + + +__all__ = ['ImageSequenceWidget'] + + +STYLE = """ +QToolBar { + border: 0px solid black; + border-radius:2px; + background-color: rgba(0,0,0,100); +} + +QToolButton { + background-color: transparent; +} +""" + + +class ImageSequenceWidget(QtWidgets.QToolButton): + + DEFAULT_PLAYHEAD_COLOR = QtGui.QColor(255, 255, 255, 220) + + def __init__(self, parent=None, theme=None): + QtWidgets.QToolButton.__init__(self, parent) + + self._theme = theme + + self._imageSequence = ImageSequence("") + self._imageSequence.frameChanged.connect(self._frameChanged) + + self._toolBar = QtWidgets.QToolBar(self) + self._toolBar.setStyleSheet(STYLE) + + studioqt.fadeOut(self._toolBar, duration=0) + + spacer = QtWidgets.QWidget() + spacer.setMaximumWidth(4) + spacer.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + self._toolBar.addWidget(spacer) + + spacer = QtWidgets.QWidget() + spacer.setMaximumWidth(4) + spacer.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred + ) + self._firstSpacer = self._toolBar.addWidget(spacer) + + self.setSize(150, 150) + self.setMouseTracking(True) + + def hasFrames(self): + """ + Check if the images sequence has any frames. + + :rtype: bool + """ + return bool(self.firstFrame()) + + def firstFrame(self): + """ + Get the first frame in the image sequence. + + :rtype: str + """ + return self._imageSequence.firstFrame() + + def isSequence(self): + """ + Check if the image sequence has more than one frame. + + :rtype: bool + """ + return bool(self._imageSequence.frameCount() > 1) + + def dirname(self): + """ + Get the directory to the image sequence on disk. + + :rtype: str + """ + return self._imageSequence.dirname() + + def addAction(self, path, text, tip, callback): + """ + Add an action to the tool bar. + + :type path: str + :type text: str + :type tip: str + :type callback: func + + :rtype: QtWidgets.QAction + """ + icon = studioqt.Icon.fa( + path, + color="rgba(250,250,250,160)", + color_active="rgba(250,250,250,250)", + color_disabled="rgba(0,0,0,20)" + ) + + action = QtWidgets.QAction(icon, text, self._toolBar) + action.setToolTip(tip) + # action.setStatusTip(tip) + # action.setWhatsThis(tip) + + self._toolBar.insertAction(self._firstSpacer, action) + action.triggered.connect(callback) + + return action + + def actions(self): + """ + Get all the actions that are a child of the ToolBar. + + :rtype: list[QtWidgets.QAction] + """ + actions = [] + + for child in self._toolBar.children(): + if isinstance(child, QtWidgets.QAction): + actions.append(child) + + return actions + + def resizeEvent(self, event): + """ + Called when the widget is resized. + + :type event: QtWidgets.QResizeEvent + """ + self.updateToolBar() + + def updateToolBar(self): + """Update the tool bar size depending on the number of actions.""" + dpi = 1.0 + if self._theme: + dpi = self._theme.dpi() + + self._toolBar.setIconSize(QtCore.QSize(16*dpi, 16*dpi)) + + count = (len(self.actions())) - 3 + width = ((26*dpi) * count) + + self._toolBar.setGeometry(0, 0, width, 25*dpi) + + x = self.rect().center().x() - (self._toolBar.width()/2) + y = self.height() - self._toolBar.height() - (12*dpi) + width = self._toolBar.width() + + self._toolBar.setGeometry(x, y, width, self._toolBar.height()) + + def isControlModifier(self): + """ + Check if the control modifier is active. + + :rtype: bool + """ + modifiers = QtWidgets.QApplication.keyboardModifiers() + return modifiers == QtCore.Qt.ControlModifier + + def setSize(self, w, h): + """ + Reimplemented so that the icon size is set at the same time. + + :type w: int + :type h: int + :rtype: None + """ + self._size = QtCore.QSize(w, h) + self.setIconSize(self._size) + self.setFixedSize(self._size) + + def setPath(self, path): + """ + Set a single frame image sequence. + + :type path: str + """ + self._imageSequence.setPath(path) + self.updateIcon() + + def setDirname(self, dirname): + """ + This method has been deprecated. + + Please use setPath instead. + + :type dirname: str + """ + self._imageSequence.setPath(dirname) + self.updateIcon() + + def updateIcon(self): + """Update the icon for the current frame.""" + if self._imageSequence.frames(): + icon = self._imageSequence.currentIcon() + self.setIcon(icon) + + def enterEvent(self, event): + """ + Start playing the image sequence when the mouse enters the widget. + + :type event: QtCore.QEvent + :rtype: None + """ + self._imageSequence.start() + studioqt.fadeIn(self._toolBar, duration=300) + + def leaveEvent(self, event): + """ + Stop playing the image sequence when the mouse leaves the widget. + + :type event: QtCore.QEvent + :rtype: None + """ + self._imageSequence.pause() + studioqt.fadeOut(self._toolBar, duration=300) + + def mouseMoveEvent(self, event): + """ + Reimplemented to add support for scrubbing. + + :type event: QtCore.QEvent + :rtype: None + """ + if self.isControlModifier() and self._imageSequence.frameCount() > 1: + percent = 1.0 - (float(self.width() - event.pos().x()) / float(self.width())) + frame = int(self._imageSequence.frameCount() * percent) + self._imageSequence.jumpToFrame(frame) + icon = self._imageSequence.currentIcon() + self.setIcon(icon) + + def _frameChanged(self, frame=None): + """ + Triggered when the image sequence changes frame. + + :type frame: int or None + :rtype: None + """ + if not self.isControlModifier(): + icon = self._imageSequence.currentIcon() + self.setIcon(icon) + + def currentFilename(self): + """ + Return the current image location. + + :rtype: str + """ + return self._imageSequence.currentFilename() + + def playheadHeight(self): + """ + Return the height of the playhead. + + :rtype: int + """ + return 4 + + def paintEvent(self, event): + """ + Triggered on frame changed. + + :type event: QtCore.QEvent + :rtype: None + """ + QtWidgets.QToolButton.paintEvent(self, event) + + painter = QtGui.QPainter() + painter.begin(self) + + if self.currentFilename() and self._imageSequence.frameCount() > 1: + + r = event.rect() + + playheadHeight = self.playheadHeight() + playheadPosition = self._imageSequence.percent() * r.width()-1 + + x = r.x() + y = self.height() - playheadHeight + + painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtGui.QBrush(self.DEFAULT_PLAYHEAD_COLOR)) + painter.drawRect(x, y, playheadPosition, playheadHeight) + + painter.end() \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/settings.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/settings.py new file mode 100644 index 0000000..41179f2 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/settings.py @@ -0,0 +1,78 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import studiolibrary + +_settings = None + + +def path(): + """ + Get the settings path. + + :rtype: str + """ + return studiolibrary.localPath("widgets2.json") + + +def get(key, default=None): + """ + Convenience function for getting the a value from disc. + + :type key: str + :type default: object + :rtype: object + """ + return read().get(key, default) + + +def set(key, value): + """ + Convenience function for setting key values to disc. + + :type key: str + :type value: object + """ + save({key: value}) + + +def read(): + """ + Return the local settings from the location of the SETTING_PATH. + + :rtype: dict + """ + global _settings + + if not _settings: + _settings = studiolibrary.readJson(path()) + + return _settings + + +def save(data): + """ + Save the given dict to the local location of the SETTING_PATH. + + :type data: dict + :rtype: None + """ + global _settings + _settings = None + studiolibrary.updateJson(path(), data) + + +def reset(): + """Remove and reset the item settings.""" + global _settings + _settings = None + studiolibrary.removePath(path()) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/__init__.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/__init__.py new file mode 100644 index 0000000..ab543dd --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/__init__.py @@ -0,0 +1,12 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +from .sidebarwidget import SidebarWidget \ No newline at end of file diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/sidebarwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/sidebarwidget.py new file mode 100644 index 0000000..3362f15 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/sidebarwidget.py @@ -0,0 +1,1256 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import time +import logging +import functools +import collections + +from studiovendor import six +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary +import studiolibrary.widgets + +from .sidebarwidgetitem import SidebarWidgetItem + + +__all__ = ["SidebarWidget"] + +logger = logging.getLogger(__name__) + + +DEFAULT_SEPARATOR = "/" + + +def pathsToDict(paths, root="", separator=None): + """ + Return the given paths as a nested dict. + + Example: + paths = ["/fruit/apple", "/fruit/orange"] + print pathsToDict(paths) + # Result: {"fruit" : {"apple":{}}, {"orange":{}}} + + :type paths: list[str] + :type root: str + :type separator: str or None + :rtype: dict + """ + separator = separator or DEFAULT_SEPARATOR + results = collections.OrderedDict() + paths = studiolibrary.normPaths(paths) + + for path in paths: + p = results + + # This is to add support for grouping by the given root path. + if root and root in path: + path = path.replace(root, "") + p = p.setdefault(root, collections.OrderedDict()) + + keys = path.split(separator)[0:] + + for key in keys: + if key: + p = p.setdefault(key, collections.OrderedDict()) + + return results + + +def findRoot(paths, separator=None): + """ + Find the common path for the given paths. + + Example: + paths = [ + '/fruit/apple', + '/fruit/orange', + '/fruit/banana' + ] + print(findRoot(paths)) + # '/fruit' + + :type paths: list[str] + :type separator: str + :rtype: str + """ + if paths: + path = list(paths)[0] # Only need one from the list to verify the common path. + else: + path = "" + + result = None + separator = separator or DEFAULT_SEPARATOR + + tokens = path.split(separator) + + for i, token in enumerate(tokens): + root = separator.join(tokens[:i+1]) + match = True + + for path in paths: + if not path.startswith(root + separator): + match = False + break + + if not match: + break + + result = root + + return result + + + +class SidebarWidget(QtWidgets.QWidget): + + itemDropped = QtCore.Signal(object) + itemRenamed = QtCore.Signal(str, str) + itemSelectionChanged = QtCore.Signal() + settingsMenuRequested = QtCore.Signal(object) + + def __init__(self, *args): + super(SidebarWidget, self).__init__(*args) + + self._dataset = None + self._lineEdit = None + self._previousFilterText = "" + + layout = QtWidgets.QVBoxLayout() + layout.setSpacing(0) + layout.setContentsMargins(0,0,0,0) + + self.setLayout(layout) + + self._treeWidget = TreeWidget(self) + self._treeWidget.itemDropped = self.itemDropped + self._treeWidget.itemRenamed = self.itemRenamed + self._treeWidget.itemSelectionChanged.connect(self._itemSelectionChanged) + + self._titleWidget = self.createTitleWidget() + self._titleWidget.ui.menuButton.clicked.connect(self.showSettingsMenu) + self._titleWidget.ui.titleButton.clicked.connect(self.clearSelection) + + self.layout().addWidget(self._titleWidget) + self.layout().addWidget(self._treeWidget) + + self._treeWidget.installEventFilter(self) + + def _itemSelectionChanged(self, *args): + self.itemSelectionChanged.emit() + + def eventFilter(self, obj, event): + """Using an event filter to show the search widget on key press.""" + if event.type() == QtCore.QEvent.KeyPress: + self._keyPressEvent(event) + + return super(SidebarWidget, self).eventFilter(obj, event) + + def _keyPressEvent(self, event): + """ + Triggered from the tree widget key press event. + + :type event: QKeyEvent + """ + text = event.text().strip() + + if not text.isalpha() and not text.isdigit(): + return + + if text and not self._titleWidget.ui.filterEdit.hasFocus(): + self._titleWidget.ui.filterEdit.setText(text) + + self.setFilterVisible(True) + + self._previousFilterText = text + + def _filterVisibleTrigger(self, visible): + """ + Triggered by the filter visible action. + + :type visible: bool + """ + self.setFilterVisible(visible) + self._titleWidget.ui.filterEdit.selectAll() + + def createTitleWidget(self): + """ + Create a new instance of the title bar widget. + + :rtype: QtWidgets.QFrame + """ + + class UI(object): + """Proxy class for attaching ui widgets as properties.""" + pass + + titleWidget = QtWidgets.QFrame(self) + titleWidget.setObjectName("titleWidget") + titleWidget.ui = UI() + + vlayout = QtWidgets.QVBoxLayout() + vlayout.setSpacing(0) + vlayout.setContentsMargins(0,0,0,0) + + hlayout = QtWidgets.QHBoxLayout() + hlayout.setSpacing(0) + hlayout.setContentsMargins(0,0,0,0) + + vlayout.addLayout(hlayout) + + titleButton = QtWidgets.QPushButton(self) + titleButton.setText("Folders") + titleButton.setObjectName("titleButton") + titleWidget.ui.titleButton = titleButton + + hlayout.addWidget(titleButton) + + menuButton = QtWidgets.QPushButton(self) + menuButton.setText("...") + menuButton.setObjectName("menuButton") + titleWidget.ui.menuButton = menuButton + + hlayout.addWidget(menuButton) + + self._lineEdit = studiolibrary.widgets.LineEdit(self) + self._lineEdit.hide() + self._lineEdit.setObjectName("filterEdit") + self._lineEdit.setText(self.treeWidget().filterText()) + self._lineEdit.textChanged.connect(self.searchChanged) + titleWidget.ui.filterEdit = self._lineEdit + + vlayout.addWidget(self._lineEdit) + + titleWidget.setLayout(vlayout) + + return titleWidget + + def _dataChanged(self): + pass + + def setDataset(self, dataset): + """ + Set the dataset for the search widget: + + :type dataset: studioqt.Dataset + """ + self._dataset = dataset + self._dataset.dataChanged.connect(self._dataChanged) + self._dataChanged() + + def dataset(self): + """ + Get the dataset for the search widget. + + :rtype: studioqt.Dataset + """ + return self._dataset + + def search(self): + """Run the dataset search.""" + if self.dataset(): + self.dataset().addQuery(self.query()) + self.dataset().search() + else: + logger.info('No dataset found for the sidebar widget.') + + def query(self): + """ + Get the query for the sidebar widget. + + :rtype: dict + """ + filters = [] + + for path in self.selectedPaths(): + if self.isRecursive(): + suffix = "" if path.endswith("/") else "/" + + filter_ = ('folder', 'startswith', path + suffix) + filters.append(filter_) + + filter_ = ('folder', 'is', path) + filters.append(filter_) + + uniqueName = 'sidebar_widget_' + str(id(self)) + return {'name': uniqueName, 'operator': 'or', 'filters': filters} + + def searchChanged(self, text): + """ + Triggered when the search filter has changed. + + :type text: str + """ + self.refreshFilter() + if text: + self.setFilterVisible(True) + else: + self.treeWidget().setFocus() + self.setFilterVisible(False) + + def showSettingsMenu(self): + """Create and show a new settings menu instance.""" + + menu = studioqt.Menu(self) + + self.settingsMenuRequested.emit(menu) + + self.createSettingsMenu(menu) + + point = QtGui.QCursor.pos() + point.setX(point.x() + 3) + point.setY(point.y() + 3) + action = menu.exec_(point) + menu.close() + + def createSettingsMenu(self, menu): + """ + Create a new settings menu instance. + + :rtype: QMenu + """ + action = menu.addAction("Show Filter") + action.setCheckable(True) + action.setChecked(self.isFilterVisible()) + + callback = functools.partial(self._filterVisibleTrigger, not self.isFilterVisible()) + action.triggered.connect(callback) + + action = menu.addAction("Show Icons") + action.setCheckable(True) + action.setChecked(self.iconsVisible()) + + callback = functools.partial(self.setIconsVisible, not self.iconsVisible()) + action.triggered.connect(callback) + + action = menu.addAction("Show Root Folder") + action.setCheckable(True) + action.setChecked(self.isRootVisible()) + + callback = functools.partial(self.setRootVisible, not self.isRootVisible()) + action.triggered.connect(callback) + + return menu + + def setFilterVisible(self, visible): + """ + Set the filter widget visible + + :type visible: bool + """ + self._titleWidget.ui.filterEdit.setVisible(visible) + self._titleWidget.ui.filterEdit.setFocus() + + if not visible and bool(self.treeWidget().filterText()): + self.treeWidget().setFilterText("") + else: + self.refreshFilter() + + def setSettings(self, settings): + """ + Set the settings for the widget. + + :type settings: dict + """ + self.treeWidget().setSettings(settings) + + value = settings.get("filterVisible") + if value is not None: + self.setFilterVisible(value) + + value = settings.get("filterText") + if value is not None: + self.setFilterText(value) + + def settings(self): + """ + Get the settings for the widget. + + :rtype: dict + """ + settings = self.treeWidget().settings() + + settings["filterText"] = self.filterText() + settings["filterVisible"] = self.isFilterVisible() + + return settings + + # -------------------------------- + # convenience methods + # -------------------------------- + + def filterText(self): + return self.treeWidget().filterText() + + def setFilterText(self, text): + self._titleWidget.ui.filterEdit.setText(text) + + def refreshFilter(self): + self.treeWidget().setFilterText(self._titleWidget.ui.filterEdit.text()) + + def isFilterVisible(self): + return bool(self.treeWidget().filterText()) or self._titleWidget.ui.filterEdit.isVisible() + + def setIconsVisible(self, visible): + self.treeWidget().setIconsVisible(visible) + + def iconsVisible(self): + return self.treeWidget().iconsVisible() + + def setRootVisible(self, visible): + self.treeWidget().setRootVisible(visible) + + def isRootVisible(self): + return self.treeWidget().isRootVisible() + + def treeWidget(self): + return self._treeWidget + + def setDpi(self, dpi): + self.treeWidget().setDpi(dpi) + + def setRecursive(self, enabled): + self.treeWidget().setRecursive(enabled) + + def isRecursive(self): + return self.treeWidget().isRecursive() + + def setData(self, *args, **kwargs): + self.treeWidget().setData(*args, **kwargs) + + def setItemData(self, id, data): + self.treeWidget().setPathSettings(id, data) + + def setLocked(self, locked): + self.treeWidget().setLocked(locked) + + def selectedPath(self): + return self.treeWidget().selectedPath() + + def selectPaths(self, paths): + self.treeWidget().selectPaths(paths) + + def selectedPaths(self): + return self.treeWidget().selectedPaths() + + def clearSelection(self): + self.treeWidget().clearSelection() + + +class TreeWidget(QtWidgets.QTreeWidget): + + itemDropped = QtCore.Signal(object) + itemRenamed = QtCore.Signal(str, str) + itemSelectionChanged = QtCore.Signal() + + def __init__(self, *args): + super(TreeWidget, self).__init__(*args) + + self._dpi = 1 + self._data = [] + self._items = [] + self._index = {} + self._locked = False + self._dataset = None + self._recursive = True + self._filterText = "" + self._rootVisible = False + self._iconsVisible = True + + self._options = { + 'field': 'path', + 'separator': '/', + 'recursive': True, + 'autoRootPath': True, + 'rootText': 'FOLDERS', + 'sortBy': None, + 'queries': [{'filters': [('type', 'is', 'Folder')]}] + } + + self.itemExpanded.connect(self.update) + self.itemCollapsed.connect(self.update) + + self.setDpi(1) + + self.setAcceptDrops(True) + self.setHeaderHidden(True) + self.setFrameShape(QtWidgets.QFrame.NoFrame) + self.setSelectionMode(QtWidgets.QTreeWidget.ExtendedSelection) + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) + + def filterText(self): + """ + Get the current filter text. + + :rtype: bool + """ + return self._filterText + + def setFilterText(self, text): + """ + Triggered when the search filter has changed. + + :type text: str + """ + self._filterText = text.strip() + self.refreshFilter() + + def refreshFilter(self): + """Refresh the current item filter.""" + items = self.items() + + for item in items: + if self._filterText.lower() in item.text(0).lower(): + item.setHidden(False) + for parent in item.parents(): + parent.setHidden(False) + else: + item.setHidden(True) + + def clear(self): + """Clear all the items from the tree widget.""" + self._items = [] + self._index = {} + super(TreeWidget, self).clear() + + def setRootVisible(self, visible): + """ + Set the root item visible. + + :type visible: bool + """ + self._rootVisible = visible + self.refreshData() + + def isRootVisible(self): + """ + Check if the root item is visible + + :rtype: bool + """ + return self._rootVisible + + def setIconsVisible(self, visible): + """ + Set all icons visible. + + :type visible: bool + """ + self._iconsVisible = visible + self.refreshData() + + def iconsVisible(self): + """ + Check if all the icons are visible. + + :rtype: bool + """ + return self._iconsVisible + + def selectionChanged(self, *args): + """Triggered the current selection has changed.""" + self.parent().search() + + def setRecursive(self, enable): + """ + Set the search query on the dataset to be recursive. + + :type enable: bool + """ + self._recursive = enable + self.parent().search() + + def isRecursive(self): + """ + Get the recursive query enable state. + + :rtype: bool + """ + return self._recursive + + def sortBy(self): + """ + Get the sortby field. + + :rtype: str + """ + return self._options.get('sortBy', [self.field()]) + + def field(self): + """ + Get the field. + + :rtype: str + """ + return self._options.get('field', '') + + def rootText(self): + """ + Get the root text. + + :rtype: str + """ + return self._options.get('rootText') + + def separator(self): + """ + Get the separator used in the fields to separate level values. + + :rtype: str + """ + return self._options.get('separator', DEFAULT_SEPARATOR) + + def _dataChanged(self): + """Triggered when the data set has changed.""" + pass + # data = collections.OrderedDict() + # queries = self._options.get("queries") + # + # items = self.dataset().findItems(queries) + # + # for item in items: + # itemData = item.itemData() + # value = itemData.get(self.field()) + # data[value] = {'iconPath': itemData.get('iconPath')} + # + # if data: + # root = findRoot(data.keys(), separator=self.separator()) + # self.setPaths(data, root=root) + + def setLocked(self, locked): + """ + Set the widget items to read only mode. + + :type locked: bool + :rtype: None + """ + self._locked = locked + + def isLocked(self): + """ + Return True if the items are in read only mode + + :rtype: bool + """ + return self._locked + + def itemAt(self, pos): + """ + :type pos: QtGui.QPoint + :rtype: None or Folder + """ + index = self.indexAt(pos) + if not index.isValid(): + return + + item = self.itemFromIndex(index) + return item + + def dropEvent(self, event): + """ + :type event: QtCore.QEvent + :rtype: None + """ + if self.isLocked(): + logger.debug("Folder is locked! Cannot accept drop!") + return + + self.itemDropped.emit(event) + + def dragMoveEvent(self, event): + """ + :type event: QtCore.QEvent + :rtype: None + """ + mimeData = event.mimeData() + + if mimeData.hasUrls(): + event.accept() + else: + event.ignore() + + item = self.itemAt(event.pos()) + if item: + self.selectPaths([item.path()]) + + def dragEnterEvent(self, event): + """ + :type event: QtCore.QEvent + :rtype: None + """ + event.accept() + + def selectItem(self, item): + """ + :type item: NavigationWidgetItem + :rtype: None + """ + self.selectPaths([item.path()]) + + def dpi(self): + """ + Return the dots per inch multiplier. + + :rtype: float + """ + return self._dpi + + def setDpi(self, dpi): + """ + Set the dots per inch multiplier. + + :type dpi: float + :rtype: None + """ + self._dpi = dpi + + width = 20 * dpi + height = 18 * dpi + + self.setIndentation(9 * dpi) + self.setMinimumWidth(20 * dpi) + self.setIconSize(QtCore.QSize(width, height)) + self.setStyleSheet("height: {height}px;".format(height=height)) + + def update(self, *args): + """ + :rtype: None + """ + for item in self.items(): + item.update() + + def items(self): + """ + Return a list of all the items in the tree widget. + + :rtype: list[NavigationWidgetItem] + """ + items = self.findItems( + "*", + QtCore.Qt.MatchWildcard | QtCore.Qt.MatchRecursive + ) + + return items + + def itemFromUrl(self, url): + """ + Return the item for the given url. + + :type url: QtCore.QUrl + :rtype: NavigationWidgetItem + """ + for item in self.items(): + if url == item.url(): + return item + + def itemFromPath(self, path): + """ + Return the item for the given path. + + :type path: str + :rtype: NavigationWidgetItem + """ + return self._index.get(path) + + def settings(self): + """ + Return a dictionary of the settings for this widget. + + :rtype: dict + """ + settings = {} + + scrollBar = self.verticalScrollBar() + settings["verticalScrollBar"] = { + "value": scrollBar.value() + } + + scrollBar = self.horizontalScrollBar() + settings["horizontalScrollBar"] = { + "value": scrollBar.value() + } + + for item in self.items(): + itemSettings = item.settings() + if itemSettings: + settings[item.path()] = item.settings() + + return settings + + def setSettings(self, settings): + """ + Set the settings for this widget + + :type settings: dict + """ + for path in sorted(settings.keys()): + s = settings.get(path, None) + self.setPathSettings(path, s) + + scrollBarSettings = settings.get("verticalScrollBar", {}) + value = scrollBarSettings.get("value") + if value: + self.verticalScrollBar().setValue(value) + + scrollBarSettings = settings.get("horizontalScrollBar", {}) + value = scrollBarSettings.get("value") + if value: + self.horizontalScrollBar().setValue(value) + + self.setDpi(self.dpi()) + + def setPathSettings(self, path, settings): + """ + Show the context menu at the given position. + + :type path: str + :type settings: dict + :rtype: None + """ + item = self.itemFromPath(path) + if item and settings: + item.setSettings(settings) + + def showContextMenu(self, position): + """ + Show the context menu at the given position. + + :type position: QtCore.QPoint + :rtype: None + """ + menu = self.createContextMenu() + menu.exec_(self.viewport().mapToGlobal(position)) + + def expandedItems(self): + """ + Return all the expanded items. + + :rtype: list[NavigationWidgetItem] + """ + for item in self.items(): + if self.isItemExpanded(item): + yield item + + def expandedPaths(self): + """ + Return all the expanded paths. + + :rtype: list[NavigationWidgetItem] + """ + for item in self.expandedItems(): + yield item.url() + + def setExpandedPaths(self, paths): + """ + Set the given paths to expanded. + + :type paths: list[str] + """ + for item in self.items(): + if item.url() in paths: + item.setExpanded(True) + + def selectedItem(self): + """ + Return the last selected item + + :rtype: SidebarWidgetItem + """ + path = self.selectedPath() + return self.itemFromPath(path) + + def selectedPath(self): + """ + Return the last selected path + + :rtype: str or None + """ + paths = self.selectedPaths() + if paths: + return paths[-1] + + def selectedPaths(self): + """ + Return the paths that are selected. + + :rtype: list[str] + """ + paths = [] + items = self.selectedItems() + for item in items: + path = item.path() + paths.append(path) + return studiolibrary.normPaths(paths) + + + def selectPath(self, path): + """ + Select the given path + + :type: str + :rtype: None + """ + self.selectPaths([path]) + + def selectPaths(self, paths): + """ + Select the items with the given paths. + + :type paths: list[str] + :rtype: None + """ + paths = studiolibrary.normPaths(paths) + items = self.items() + for item in items: + if studiolibrary.normPath(item.path()) in paths: + item.setSelected(True) + else: + item.setSelected(False) + + def selectUrl(self, url): + """ + Select the item with the given url. + + :type url: str + :rtype: None + """ + items = self.items() + + for item in items: + if item.url() == url: + item.setSelected(True) + else: + item.setSelected(False) + + def selectedUrls(self): + """ + Return the urls for the selected items. + + :rtype: list[str] + """ + urls = [] + items = self.selectedItems() + for item in items: + urls.append(item.url()) + return urls + + def setPaths(self, *args, **kwargs): + """ + This method has been deprecated. + """ + logger.warning("This method has been deprecated!") + self.setData(*args, **kwargs) + + def refreshData(self): + self.setData(self._data) + + def setData(self, data, root="", split=None): + """ + Set the items to the given items. + + :type data: list[str] + :type root: str + :type split: str + :rtype: None + """ + self._data = data + + settings = self.settings() + + self.blockSignals(True) + + self.clear() + + if not root: + root = findRoot(data.keys(), self.separator()) + + self.addPaths(data, root=root, split=split) + + self.setSettings(settings) + + self.blockSignals(False) + + self.parent().search() + + def addPaths(self, paths, root="", split=None): + """ + Set the given items as a flat list. + + :type paths: list[str] + :type root: str or None + :type split: str or None + """ + data = pathsToDict(paths, root=root, separator=split) + self.createItems(data, split=split) + + if isinstance(paths, dict): + self.setSettings(paths) + + def createItems(self, data, split=None): + """ + Create the items from the given data dict + + :type data: dict + :type split: str or None + + :rtype: None + """ + split = split or DEFAULT_SEPARATOR + + self._index = {} + + for key in data: + + root = split.join([key]) + + item = None + + if self.isRootVisible(): + + text = key.split(split) + if text: + text = text[-1] + else: + text = key + + item = SidebarWidgetItem(self) + item.setText(0, six.text_type(text)) + item.setPath(root) + item.setExpanded(True) + + self._index[root] = item + + def _recursive(parent, children, split=None, root=""): + for text, val in sorted(children.items()): + + if not parent: + parent = self + + path = split.join([root, text]) + path = studiolibrary.normPath(path) + + child = SidebarWidgetItem(parent) + child.setText(0, six.text_type(text)) + child.setPath(path) + + self._index[path] = child + + _recursive(child, val, split=split, root=path) + + _recursive(item, data[key], split=split, root=root) + + self.update() + self.refreshFilter() + + +class ExampleWindow(QtWidgets.QWidget): + + def __init__(self, *args): + QtWidgets.QWidget.__init__(self, *args) + + layout = QtWidgets.QVBoxLayout() + self.setLayout(layout) + + self._lineEdit = QtWidgets.QLineEdit() + self._lineEdit.textChanged.connect(self.searchChanged) + self._treeWidget = TreeWidget(self) + + self._slider = QtWidgets.QSlider(QtCore.Qt.Horizontal) + self._slider.valueChanged.connect(self._valueChanged) + self._slider.setRange(50, 200) + self._slider.setValue(100) + self._slider.setFixedHeight(18) + + layout.addWidget(self._slider) + layout.addWidget(self._lineEdit) + layout.addWidget(self._treeWidget) + + self._treeWidget.itemClicked.connect(self.itemClicked) + self._treeWidget.itemSelectionChanged.connect(self.selectionChanged) + + self.update() + + def _valueChanged(self, value): + self.update() + + def update(self): + import studiolibrary + + value = self._slider.value() + value = value / 100.0 + + theme = studiolibrary.widgets.Theme() + theme.setDpi(value) + + self._treeWidget.setDpi(value) + self._treeWidget.setStyleSheet(theme.styleSheet()) + + def setData(self, *args, **kwargs): + self._treeWidget.setData(*args, **kwargs) + + def itemClicked(self): + print("ITEM CLICKED") + print(self._treeWidget.settings()) + + items = self._treeWidget.selectedItems() + for item in items: + print(item.path()) + + def selectionChanged(self, *args): + print("SELECTION CHANGED", args) + + def searchChanged(self, text): + print("SEARCH CHANGED", text) + + items = self._treeWidget.items() + + t = time.time() + + self._treeWidget.expandAll() + + for item in items: + if text.lower() in item.text(0).lower(): + item.setHidden(False) + for parent in item.parents(): + parent.setHidden(False) + else: + item.setHidden(True) + + print(time.time() - t) + + +def runTests(): + + paths = [ + '/fruit/apple', + '/fruit/orange', + '/fruit/banana' + ] + + assert findRoot(paths) == '/fruit' + + paths = [ + '/fruit/apple', + '/fruit/orange', + '/fruit/banana', + '/tesla/cars' + ] + + assert findRoot(paths) == '' + + data = pathsToDict(paths) + + assert 'fruit' in data + assert 'apple' in data.get('fruit') + assert 'orange' in data.get('fruit') + assert 'banana' in data.get('fruit') + assert 'cars' in data.get('tesla') + + paths = [ + '>tesla>car>modelS', + '>tesla>car>modelX', + '>tesla>car>model3', + ] + + assert findRoot(paths, separator='>') == '>tesla>car' + + data = pathsToDict(paths, separator='>') + + assert 'tesla' in data + assert 'modelS' in data.get('tesla').get('car') + assert 'modelX' in data.get('tesla').get('car') + assert 'model3' in data.get('tesla').get('car') + + +def showExampleWindow(): + + data = { + "P:/production/shared/anim": { + "text": "FOLDERS", + "bold": True, + "isExpanded": True, + "iconPath": "none", + "iconColor": "rgb(100, 100, 150)", + "textColor": "rgba(100, 100, 150, 150)" + }, + + "P:/production/shared/anim/walks/fast.anim": {}, + "P:/production/shared/anim/walks/slow.anim": {}, + "P:/production/shared/anim/rigs/prop.rig": {}, + "P:/production/shared/anim/rigs/character.rig": {}, + + "Users/libraries/animation/Character/Boris/stressed.pose": {}, + "Users/libraries/animation/Character/Boris/smile.pose": {}, + "Users/libraries/animation/Character/Cornilous/normal.pose": {}, + "Users/libraries/animation/Character/Cornilous/relaxed.pose": {}, + "Users/libraries/animation/Character/Cornilous/surprised.pose": {}, + "Users/libraries/animation/Character/Figaro/test.anim": {}, + "Users/libraries/animation/Character/Figaro/anim/hiccup.anim": {}, + + "props/car/color/red": {}, + "props/car/color/orange": {}, + "props/car/color/yellow": {}, + "props/plane/color/blue": {}, + "props/plane/color/green": {}, + + "/": {}, + "/Hello": {}, + "/Hello/World": {}, + "/Test/World": {}, + + "tags": { + "text": "TAGS", + "bold": True, + "isExpanded": True, + "iconPath": "none", + "iconColor": "rgb(100, 100, 150)", + "textColor": "rgba(100, 100, 150, 150)" + }, + "tags/red": { + "iconColor": "rgb(200, 50, 50)", + "iconPath": "../../resource/icons/circle.png" + }, + "tags/orange": { + "bold": True, + "textColor": "rgb(250, 150, 50)", + "iconColor": "rgb(250, 150, 50)", + "iconPath": "../../resource/icons/circle.png" + }, + "tags/yellow": { + "iconColor": "rgb(250, 200, 0)", + "iconPath": "../../resource/icons/circle.png" + }, + "tags/blue": { + "iconColor": "rgb(50, 150, 250)", + "iconPath": "../../resource/icons/circle.png" + }, + "tags/green": { + "iconColor": "rgb(100, 200, 0)", + "iconPath": "../../resource/icons/circle.png" + } + } + + window = ExampleWindow(None) + window.setData(data) + window.show() + window.setGeometry(300, 300, 300, 600) + return window + + +if __name__ == "__main__": + with studioqt.app(): + w = showExampleWindow() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/sidebarwidgetitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/sidebarwidgetitem.py new file mode 100644 index 0000000..76ae166 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sidebarwidget/sidebarwidgetitem.py @@ -0,0 +1,392 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import logging + +from studiovendor import six +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary + + +__all__ = ["SidebarWidgetItem"] + + +logger = logging.getLogger(__name__) + + +class SidebarWidgetItem(QtWidgets.QTreeWidgetItem): + + PIXMAP_CACHE = {} + + def __init__(self, *args): + QtWidgets.QTreeWidgetItem.__init__(self, *args) + + self._path = "" + self._bold = None + self._iconVisible = True + self._iconPath = None + self._iconColor = None + self._textColor = None + self._iconKey = None + self._expandedIconPath = None + self._collapsedIconPath = None + + self._settings = {} + + def iconPath(self): + """ + Return the icon path for the item. + + :rtype: str + """ + return self._iconPath or self.defaultIconPath() + + def createPixmap(self, path, color): + """ + Create a new Pixmap from the given path. + + :type path: str + :type color: str or QtCore.QColor + :rtype: QtCore.QPixmap + """ + dpi = self.treeWidget().dpi() + key = path + color + "DPI-" + str(dpi) + pixmap = self.PIXMAP_CACHE.get(key) + + if not pixmap: + + width = 20 * dpi + height = 18 * dpi + + if "/" not in path and "\\" not in path: + path = studiolibrary.resource.get("icons", path) + + if not os.path.exists(path): + path = self.defaultIconPath() + + pixmap2 = studioqt.Pixmap(path) + pixmap2.setColor(color) + pixmap2 = pixmap2.scaled( + 16 * dpi, + 16 * dpi, + QtCore.Qt.KeepAspectRatio, + QtCore.Qt.SmoothTransformation + ) + + x = (width - pixmap2.width()) / 2 + y = (height - pixmap2.height()) / 2 + + pixmap = QtGui.QPixmap(QtCore.QSize(width, height)) + pixmap.fill(QtCore.Qt.transparent) + + painter = QtGui.QPainter(pixmap) + painter.drawPixmap(x, y, pixmap2) + painter.end() + + self.PIXMAP_CACHE[key] = pixmap + + return pixmap + + def expandedIconPath(self): + """ + Return the icon path to be shown when expanded. + + :rtype: str + """ + return self._iconPath or studiolibrary.resource.get("icons", "folder_open.png") + + def collapsedIconPath(self): + """ + Return the icon path to be shown when collapsed. + + :rtype: str + """ + return self._iconPath or self.defaultIconPath() + + def defaultIconPath(self): + """ + Return the default icon path. + + :rtype: str + """ + return studiolibrary.resource.get("icons", "folder.svg") + + def setIconPath(self, path): + """ + Return the icon path for the item. + + :type path: str + :rtype: None + """ + self._iconPath = path + self.updateIcon() + + def setIconVisible(self, visible): + """ + Set the icon visibility for the folder item + + :type visible: bool + """ + self._iconVisible = visible + + def isIconVisible(self): + """ + Check if the icon is visible. + + :rtype: bool + """ + return self.treeWidget().iconsVisible() and self._iconVisible + + def iconColor(self): + """ + Return the icon color. + + :rtype: QtGui.QColor or None + """ + return self._iconColor or self.defaultIconColor() + + def defaultIconColor(self): + """ + Return the default icon color. + + :rtype: QtGui.QColor or None + """ + palette = self.treeWidget().palette() + + color = palette.color(self.treeWidget().foregroundRole()) + color = studioqt.Color.fromColor(color).toString() + + return str(color) + + def setIconColor(self, color): + """ + Set the icon color. + + :type color: QtGui.QColor or str + :rtype: None + """ + if color: + + if isinstance(color, QtGui.QColor): + color = studioqt.Color.fromColor(color) + + elif isinstance(color, six.string_types): + color = studioqt.Color.fromString(color) + + self._iconColor = color.toString() + else: + self._iconColor = None + + self.updateIcon() + + def setPath(self, path): + """ + Set the path for the navigation item. + + :type path: str + :rtype: None + """ + self._path = path + + def path(self): + """ + Return the item path. + + :rtype: str + """ + return self._path + + def parents(self): + """ + Return all item parents. + + :rtype: list[SidebarWidgetItem] + """ + parents = [] + parent = self.parent() + + if parent: + parents.append(parent) + + while parent.parent(): + parent = parent.parent() + parents.append(parent) + + return parents + + def url(self): + """ + Return the url path. + + :rtype: str + """ + return QtCore.QUrl(self.path()) + + def update(self): + """ + :rtype: None + """ + self.updateIcon() + + def updateIcon(self): + """ + Force the icon to update. + + :rtype: None + """ + if self.isIconVisible(): + if self.isExpanded(): + path = self.expandedIconPath() + else: + path = self.collapsedIconPath() + + pixmap = self.createPixmap(path, self.iconColor()) + + self.setIcon(0, pixmap) + + def bold(self): + """ + Returns true if weight() is a value greater than QFont::Normal + + :rtype: bool + """ + return self.font(0).bold() + + def setBold(self, enable): + """ + If enable is true sets the font's weight to + + :rtype: bool + """ + if enable: + self._settings["bold"] = enable + + font = self.font(0) + font.setBold(enable) + self.setFont(0, font) + + def setTextColor(self, color): + """ + Set the foreground color to the given color + + :type color: QtGui.QColor or str + :rtype: None + """ + if isinstance(color, QtGui.QColor): + color = studioqt.Color.fromColor(color) + + elif isinstance(color, six.string_types): + color = studioqt.Color.fromString(color) + + self._settings["textColor"] = color.toString() + + brush = QtGui.QBrush() + brush.setColor(color) + self.setForeground(0, brush) + + def textColor(self): + """ + Return the foreground color the item. + + :rtype: QtGui.QColor + """ + color = self.foreground(0).color() + return studioqt.Color.fromColor(color) + + def settings(self): + """ + Return the current state of the item as a dictionary. + + :rtype: dict + """ + settings = {} + + isSelected = self.isSelected() + if isSelected: + settings["selected"] = isSelected + + isExpanded = self.isExpanded() + if isExpanded: + settings["expanded"] = isExpanded + + bold = self._settings.get("bold") + if bold: + settings["bold"] = bold + + textColor = self._settings.get("textColor") + if textColor: + settings["textColor"] = textColor + + return settings + + def setExpandedParents(self, expanded): + """ + Set all the parents of the item to the value of expanded. + + :type expanded: bool + :rtype: None + """ + parents = self.parents() + for parent in parents: + parent.setExpanded(expanded) + + def setSelected(self, select): + """ + Sets the selected state of the item to select. + + :type select: bool + :rtype: None + """ + QtWidgets.QTreeWidgetItem.setSelected(self, select) + + if select: + self.setExpandedParents(select) + + def setSettings(self, settings): + """ + Set the current state of the item from a dictionary. + + :type settings: dict + """ + text = settings.get("text") + if text: + self.setText(0, text) + + iconPath = settings.get("icon") + if iconPath is not None: + self.setIconPath(iconPath) + + iconColor = settings.get("color") + if iconColor is not None: + self.setIconColor(iconColor) + + selected = settings.get("selected") + if selected is not None: + self.setSelected(selected) + + expanded = settings.get("expanded") + if expanded is not None and self.childCount() > 0: + self.setExpanded(expanded) + self.updateIcon() + + bold = settings.get("bold") + if bold is not None: + self.setBold(bold) + + textColor = settings.get("textColor") + if textColor: + self.setTextColor(textColor) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/slideraction.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/slideraction.py new file mode 100644 index 0000000..7cc92e2 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/slideraction.py @@ -0,0 +1,81 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + + +__all__ = ["SliderAction"] + + +class SliderWidgetAction(QtWidgets.QFrame): + pass + + +class SliderAction(QtWidgets.QWidgetAction): + + def __init__(self, label="", parent=None): + """ + :type parent: QtWidgets.QMenu + """ + QtWidgets.QWidgetAction.__init__(self, parent) + + self._widget = SliderWidgetAction(parent) + self._label = QtWidgets.QLabel(label, self._widget) + + self._slider = QtWidgets.QSlider(QtCore.Qt.Horizontal, self._widget) + self._slider.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Expanding + ) + + self.valueChanged = self._slider.valueChanged + + def widget(self): + """ + Return the widget for this action. + + :rtype: QtWidgets.QWidget + """ + return self._widget + + def label(self): + """ + Return the QLabel object. + + :rtype: QtWidgets.QLabel + """ + return self._label + + def slider(self): + """ + Return the QLabel object. + + :rtype: QtWidgets.QSlider + """ + return self._slider + + def createWidget(self, menu): + """ + This method is called by the QWidgetAction base class. + + :type menu: QtWidgets.QMenu + """ + actionWidget = self.widget() + + actionLayout = QtWidgets.QHBoxLayout() + actionLayout.setContentsMargins(0, 0, 0, 0) + actionLayout.addWidget(self.label()) + actionLayout.addWidget(self.slider()) + actionWidget.setLayout(actionLayout) + + return actionWidget diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sortbymenu.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sortbymenu.py new file mode 100644 index 0000000..586aa0a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/sortbymenu.py @@ -0,0 +1,111 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtWidgets + +from .separatoraction import SeparatorAction + + +class SortByMenu(QtWidgets.QMenu): + + def __init__(self, name, parent, dataset): + super(SortByMenu, self).__init__(name, parent) + + self._dataset = dataset + self.aboutToShow.connect(self.populateMenu) + + def setDataset(self, dataset): + """ + Set the dataset model for the menu: + + :type dataset: studiolibrary.Dataset + """ + self._dataset = dataset + + def dataset(self): + """ + Get the dataset model for the menu. + + :rtype: studiolibrary.Dataset + """ + return self._dataset + + def setSortBy(self, sortName, sortOrder): + """ + Set the sort by value for the dataset. + + :type sortName: str + :type sortOrder: str + """ + if sortName == "Custom Order": + sortOrder = "asc" + + value = sortName + ":" + sortOrder + self.dataset().setSortBy([value]) + self.dataset().search() + + def populateMenu(self): + """ + Show the menu options. + """ + self.clear() + + sortby = self.dataset().sortBy() + if sortby: + currentField = self.dataset().sortBy()[0].split(":")[0] + currentOrder = "dsc" if "dsc" in self.dataset().sortBy()[0] else "asc" + else: + currentField = "" + currentOrder = "" + + action = SeparatorAction("Sort By", self) + self.addAction(action) + + fields = self.dataset().fields() + + for field in fields: + + if not field.get("sortable"): + continue + + name = field.get("name") + + action = self.addAction(name.title()) + action.setCheckable(True) + + if currentField == name: + action.setChecked(True) + else: + action.setChecked(False) + + callback = partial(self.setSortBy, name, currentOrder) + action.triggered.connect(callback) + + action = SeparatorAction("Sort Order", self) + self.addAction(action) + + action = self.addAction("Ascending") + action.setCheckable(True) + action.setChecked(currentOrder == "asc") + + callback = partial(self.setSortBy, currentField, "asc") + action.triggered.connect(callback) + + action = self.addAction("Descending") + action.setCheckable(True) + action.setChecked(currentOrder == "dsc") + + callback = partial(self.setSortBy, currentField, "dsc") + action.triggered.connect(callback) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/statuswidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/statuswidget.py new file mode 100644 index 0000000..f004d71 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/statuswidget.py @@ -0,0 +1,235 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor import six +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studiolibrary + + +class ProgressBar(QtWidgets.QFrame): + + def __init__(self, *args): + QtWidgets.QFrame.__init__(self, *args) + + layout = QtWidgets.QHBoxLayout() + layout.setSpacing(0) + layout.setContentsMargins(0, 0, 0, 0) + + self._label = QtWidgets.QLabel("", self) + self._label.setAlignment( + QtCore.Qt.AlignRight | + QtCore.Qt.AlignVCenter + ) + self._label.setSizePolicy( + QtWidgets.QSizePolicy.Preferred, + QtWidgets.QSizePolicy.Preferred + ) + + layout.addWidget(self._label) + + self._progressBar = QtWidgets.QProgressBar(self) + self._progressBar.setFormat("") + self._progressBar.setRange(0, 100) + self._progressBar.setSizePolicy( + QtWidgets.QSizePolicy.Preferred, + QtWidgets.QSizePolicy.Preferred + ) + + layout.addWidget(self._progressBar) + + self.setLayout(layout) + + def reset(self): + """Reimplementing for convenience""" + self._progressBar.reset() + + def setText(self, text): + """ + Reimplementing for convenience + + :type text: str + """ + self._label.setText(text) + + def setValue(self, value): + """ + Reimplementing for convenience + + :type value: float or int + """ + self._progressBar.setValue(value) + + def setRange(self, min_, max_): + """ + Reimplementing for convenience + + :type min_: int + :type max_: int + """ + self._progressBar.setRange(min_, max_) + + +class StatusWidget(QtWidgets.QFrame): + + DEFAULT_DISPLAY_TIME = 10000 # Milliseconds, 15 secs + + def __init__(self, *args): + QtWidgets.QFrame.__init__(self, *args) + + self.setObjectName("statusWidget") + self.setFrameShape(QtWidgets.QFrame.NoFrame) + + self._blocking = False + self._timer = QtCore.QTimer(self) + + self._label = QtWidgets.QLabel("", self) + self._label.setCursor(QtCore.Qt.IBeamCursor) + self._label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) + self._label.setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Preferred) + + self._button = QtWidgets.QPushButton(self) + self._button.setMaximumSize(QtCore.QSize(17, 17)) + self._button.setIconSize(QtCore.QSize(17, 17)) + + self._progressBar = ProgressBar(self) + self._progressBar.hide() + + layout = QtWidgets.QHBoxLayout() + layout.setContentsMargins(1, 0, 0, 0) + + layout.addWidget(self._button) + layout.addWidget(self._label) + layout.addWidget(self._progressBar) + + self.setLayout(layout) + self.setFixedHeight(19) + self.setMinimumWidth(5) + + self._timer.timeout.connect(self.reset) + + def progressBar(self): + """ + Get the progress widget + + rtype: QtWidgets.QProgressBar + """ + return self._progressBar + + def isBlocking(self): + """ + Return true if the status widget is blocking, otherwise return false. + :rtype: bool + """ + return self._blocking + + def showInfoMessage(self, message, msecs=None): + """ + Set an info message to be displayed in the status widget. + + :type message: str + :type msecs: int + + :rtype: None + """ + if self.isBlocking(): + return + + self.setProperty("status", "info") + + icon = studiolibrary.resource.icon("info") + self.showMessage(message, icon, msecs) + + def setProperty(self, *args): + """ + Overriding this method to force the style sheet to reload. + + :type args: list + """ + super(StatusWidget, self).setProperty(*args) + self.setStyleSheet(self.styleSheet()) + + def showErrorMessage(self, message, msecs=None): + """ + Set an error to be displayed in the status widget. + + :type message: str + :type msecs: int + + :rtype: None + """ + self.setProperty("status", "error") + + icon = studiolibrary.resource.icon("error") + self.showMessage(message, icon, msecs, blocking=True) + + def showWarningMessage(self, message, msecs=None): + """ + Set a warning to be displayed in the status widget. + + :type message: str + :type msecs: int + + :rtype: None + """ + if self.isBlocking(): + return + + self.setProperty("status", "warning") + + icon = studiolibrary.resource.icon("warning") + self.showMessage(message, icon, msecs) + + def showMessage(self, message, icon, msecs=None, blocking=False): + """ + Set the given text to be displayed in the status widget. + + :type message: str + :type icon: icon + :type msecs: int + + :rtype: None + """ + msecs = msecs or self.DEFAULT_DISPLAY_TIME + + self._blocking = blocking + + if icon: + self._button.setIcon(icon) + self._button.show() + else: + self._button.hide() + + if message: + self._label.setText(six.text_type(message)) + self._timer.stop() + self._timer.start(msecs) + else: + self.reset() + + self.update() + + def reset(self): + """ + Called when the current animation has finished. + + :rtype: None + """ + self._timer.stop() + self._button.hide() + self._label.setText("") + icon = studiolibrary.resource.icon("blank") + self._button.setIcon(icon) + self.setProperty("status", "") + self._blocking = False diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/themesmenu.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/themesmenu.py new file mode 100644 index 0000000..8c4d7b1 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/themesmenu.py @@ -0,0 +1,658 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets +from studiovendor import six + +import studioqt +import studiolibrary + +from .separatoraction import SeparatorAction + + +__all__ = ["Theme", "ThemeAction", "ThemesMenu"] + + +THEME_PRESETS = [ + { + "name": "Blue", + "accentColor": "rgba(50, 180, 240, 255)", + "backgroundColor": None, + }, + { + "name": "Green", + "accentColor": "rgba(80, 200, 140, 255)", + "backgroundColor": None, + }, + { + "name": "Yellow", + "accentColor": "rgb(250, 200, 0)", + "backgroundColor": None, + }, + { + "name": "Orange", + "accentColor": "rgb(255, 170, 0)", + "backgroundColor": None, + }, + { + "name": "Peach", + "accentColor": "rgb(255, 125, 100)", + "backgroundColor": None, + }, + { + "name": "Red", + "accentColor": "rgb(230, 60, 60)", + "backgroundColor": None, + }, + { + "name": "Pink", + "accentColor": "rgb(255, 87, 123)", + "backgroundColor": None, + }, + { + "name": "Purple", + "accentColor": "rgb(110, 110, 240)", + "backgroundColor": None, + }, + { + "name": "Dark", + "accentColor": None, + "backgroundColor": "rgb(60, 64, 79)", + }, + { + "name": "Grey", + "accentColor": None, + "backgroundColor": "rgb(60, 60, 60)", + }, + { + "name": "Light", + "accentColor": None, + "backgroundColor": "rgb(245, 245, 255)", + }, +] + + +def themePresets(): + """ + Return the default theme presets. + + :rtype list[Theme] + """ + themes = [] + + for data in THEME_PRESETS: + theme = Theme() + + theme.setName(data.get("name")) + theme.setAccentColor(data.get("accentColor")) + theme.setBackgroundColor(data.get("backgroundColor")) + + themes.append(theme) + + return themes + + +class ThemeAction(QtWidgets.QAction): + + def __init__(self, theme, *args): + """ + :type theme: Theme + :type menu: QtWidgets.QMenu + :rtype: QtWidgets.QAction + """ + QtWidgets.QAction.__init__(self, theme.name(), *args) + self._theme = theme + + if theme.accentColor(): + color = theme.accentColor() + elif theme.backgroundColor(): + color = theme.backgroundColor() + else: + color = "rgb(255,255,255)" + + icon = studiolibrary.resource.icon(ThemesMenu.THEME_ICON, color=color) + self.setIcon(icon) + + def theme(self): + """ + Return the theme object for the action. + + :rtype: Theme + """ + return self._theme + + +class ThemesMenu(QtWidgets.QMenu): + + THEME_ICON = "radio_button_checked_white" + + ENABLE_CUSTOM_ACTION = True + + def __init__(self, parent, theme, themes=None): + """ + :type themes: list[Theme] + :rtype: QtWidgets.QMenu + """ + QtWidgets.QMenu.__init__(self, "Themes", parent) + + self._theme = theme + self._themes = themes + + self.createActions() + + def createActions(self): + """ + Crate the actions to be shown in the menu. + + :rtype: None + """ + # Create the menu actions for setting the accent color + action = SeparatorAction("Accent", self) + self.addAction(action) + + themes = self._themes + + if not themes: + themes = themePresets() + + for theme in themes: + if theme.accentColor(): + action = ThemeAction(theme, self) + self.addAction(action) + + if self.ENABLE_CUSTOM_ACTION: + action = QtWidgets.QAction("Custom", self) + action.triggered.connect(self.theme().browseAccentColor) + color = self.theme().accentColor().toString() + icon = studiolibrary.resource.icon(ThemesMenu.THEME_ICON, color=color) + action.setIcon(icon) + self.addAction(action) + + # Create the menu actions for setting the background color + action = SeparatorAction("Background", self) + self.addAction(action) + + for theme in themes: + if not theme.accentColor() and theme.backgroundColor(): + action = ThemeAction(theme, self) + self.addAction(action) + + if self.ENABLE_CUSTOM_ACTION: + action = QtWidgets.QAction("Custom", self) + action.triggered.connect(self._theme.browseBackgroundColor) + color = self._theme.backgroundColor().toString() + icon = studiolibrary.resource.icon(ThemesMenu.THEME_ICON, color=color) + action.setIcon(icon) + self.addAction(action) + + self.triggered.connect(self._triggered) + + def theme(self): + """ + Return the current theme for the menu. + + :rtype: studioqt.Theme + """ + return self._theme + + def setTheme(self, theme): + """ + Set the current theme for the menu. + + :type theme: studioqt.Theme + :rtype: None + """ + self._theme = theme + + def _triggered(self, action): + """ + Triggered when a theme has been clicked. + + :type action: Action + :rtype: None + """ + theme = self.theme() + if not theme: + raise Exception("Please set the current theme for the menu.") + + if not isinstance(action, ThemeAction): + return + + if action.theme().accentColor(): + theme.setAccentColor(action.theme().accentColor()) + + if action.theme().backgroundColor(): + theme.setBackgroundColor(action.theme().backgroundColor()) + + +def showThemesMenu(parent=None, themes=None): + """ + Show a menu with the given themes. + + :type themes: list[Theme] + :type parent: QtWidgets.QWidget + :rtype: QtWidgets.QAction + """ + theme = Theme() + menu = ThemesMenu(parent=parent, theme=theme, themes=themes) + position = QtGui.QCursor().pos() + action = menu.exec_(position) + return theme + + +class Theme(QtCore.QObject): + + updated = QtCore.Signal() + + DEFAULT_DARK_COLOR = QtGui.QColor(60, 60, 60) + DEFAULT_LIGHT_COLOR = QtGui.QColor(220, 220, 220) + + DEFAULT_ACCENT_COLOR = QtGui.QColor(30, 145, 245) + DEFAULT_BACKGROUND_COLOR = QtGui.QColor(50, 50, 60) + + def __init__(self): + QtCore.QObject.__init__(self) + + self._dpi = 1 + + self._name = "Default" + self._accentColor = None + self._backgroundColor = None + + self.setAccentColor(self.DEFAULT_ACCENT_COLOR) + self.setBackgroundColor(self.DEFAULT_BACKGROUND_COLOR) + + def settings(self): + """ + Return a dictionary of settings for the current Theme. + + :rtype: dict + """ + settings = {} + + settings["name"] = self.name() + + accentColor = self.accentColor() + settings["accentColor"] = accentColor.toString() + + backgroundColor = self.backgroundColor() + settings["backgroundColor"] = backgroundColor.toString() + + return settings + + def setSettings(self, settings): + """ + Set a dictionary of settings for the current Theme. + + :type settings: dict + :rtype: None + """ + name = settings.get("name") + self.setName(name) + + color = settings.get("accentColor") + if color: + color = studioqt.Color.fromString(color) + self.setAccentColor(color) + + color = settings.get("backgroundColor") + if color: + color = studioqt.Color.fromString(color) + self.setBackgroundColor(color) + + def dpi(self): + """ + Return the dpi for the Theme + + :rtype: float + """ + return self._dpi + + def setDpi(self, dpi): + """ + Set the dpi for the Theme + + :type dpi: float + :rtype: None + """ + self._dpi = dpi + + def name(self): + """ + Return the name for the Theme + + :rtype: str + """ + return self._name + + def setName(self, name): + """ + Set the name for the Theme + + :type name: str + :rtype: None + """ + self._name = name + + def isDark(self): + """ + Return True if the current theme is dark. + + rtype: bool + """ + # The luminance for digital formats are (0.299, 0.587, 0.114) + red = self.backgroundColor().redF() * 0.299 + green = self.backgroundColor().greenF() * 0.587 + blue = self.backgroundColor().blueF() * 0.114 + + darkness = red + green + blue + + if darkness < 0.6: + return True + + return False + + def setDark(self): + """ + Set the current theme to the default dark color. + + :rtype: None + """ + self.setBackgroundColor(self.DEFAULT_DARK_COLOR) + + def setLight(self): + """ + Set the current theme to the default light color. + + :rtype: None + """ + self.setBackgroundColor(self.DEFAULT_LIGHT_COLOR) + + def iconColor(self): + """ + Return the icon color for the theme. + + :rtype: studioqt.Color + """ + return self.foregroundColor() + + def accentForgroundColor(self): + """ + Return the foreground color for the accent color. + + :rtype: studioqt.Color + """ + return studioqt.Color(255, 255, 255, 255) + + def foregroundColor(self): + """ + Return the foreground color for the theme. + + :rtype: studioqt.Color + """ + if self.isDark(): + return studioqt.Color(250, 250, 250, 225) + else: + return studioqt.Color(0, 40, 80, 180) + + def itemBackgroundColor(self): + """ + Return the item background color. + + :rtype: studioqt.Color + """ + if self.isDark(): + return studioqt.Color(255, 255, 255, 20) + else: + return studioqt.Color(255, 255, 255, 120) + + def itemBackgroundHoverColor(self): + """ + Return the item background color when the mouse hovers over the item. + + :rtype: studioqt.Color + """ + return studioqt.Color(255, 255, 255, 60) + + def accentColor(self): + """ + Return the accent color for the theme. + + :rtype: studioqt.Color or None + """ + return self._accentColor + + def backgroundColor(self): + """ + Return the background color for the theme. + + :rtype: studioqt.Color or None + """ + return self._backgroundColor + + def setAccentColor(self, color): + """ + Set the accent color for the theme. + + :type color: studioqt.Color | QtGui.QColor + """ + if isinstance(color, six.string_types): + color = studioqt.Color.fromString(color) + + if isinstance(color, QtGui.QColor): + color = studioqt.Color.fromColor(color) + + self._accentColor = color + + self.updated.emit() + + def setBackgroundColor(self, color): + """ + Set the background color for the theme. + + :type color: studioqt.Color | QtGui.QColor + """ + if isinstance(color, six.string_types): + color = studioqt.Color.fromString(color) + + if isinstance(color, QtGui.QColor): + color = studioqt.Color.fromColor(color) + + self._backgroundColor = color + + self.updated.emit() + + def createColorDialog( + self, + parent, + standardColors=None, + currentColor=None, + ): + """ + Create a new instance of the color dialog. + + :type parent: QtWidgets.QWidget + :type standardColors: list[int] + :rtype: QtWidgets.QColorDialog + """ + dialog = QtWidgets.QColorDialog(parent) + + if standardColors: + index = -1 + for colorR, colorG, colorB in standardColors: + index += 1 + + color = QtGui.QColor(colorR, colorG, colorB).rgba() + + try: + # Support for new qt5 signature + color = QtGui.QColor(color) + dialog.setStandardColor(index, color) + except: + # Support for new qt4 signature + color = QtGui.QColor(color).rgba() + dialog.setStandardColor(index, color) + + # PySide2 doesn't support d.open(), so we need to pass a blank slot. + dialog.open(self, QtCore.SLOT("blankSlot()")) + + if currentColor: + dialog.setCurrentColor(currentColor) + + return dialog + + def browseAccentColor(self, parent=None): + """ + Show the color dialog for changing the accent color. + + :type parent: QtWidgets.QWidget + :rtype: None + """ + standardColors = [ + (230, 60, 60), (210, 40, 40), (190, 20, 20), (250, 80, 130), + (230, 60, 110), (210, 40, 90), (255, 90, 40), (235, 70, 20), + (215, 50, 0), (240, 100, 170), (220, 80, 150), (200, 60, 130), + (255, 125, 100), (235, 105, 80), (215, 85, 60), (240, 200, 150), + (220, 180, 130), (200, 160, 110), (250, 200, 0), (230, 180, 0), + (210, 160, 0), (225, 200, 40), (205, 180, 20), (185, 160, 0), + (80, 200, 140), (60, 180, 120), (40, 160, 100), (80, 225, 120), + (60, 205, 100), (40, 185, 80), (50, 180, 240), (30, 160, 220), + (10, 140, 200), (100, 200, 245), (80, 180, 225), (60, 160, 205), + (130, 110, 240), (110, 90, 220), (90, 70, 200), (180, 160, 255), + (160, 140, 235), (140, 120, 215), (180, 110, 240), (160, 90, 220), + (140, 70, 200), (210, 110, 255), (190, 90, 235), (170, 70, 215) + ] + + currentColor = self.accentColor() + + dialog = self.createColorDialog(parent, standardColors, currentColor) + dialog.currentColorChanged.connect(self.setAccentColor) + + if dialog.exec_(): + self.setAccentColor(dialog.selectedColor()) + else: + self.setAccentColor(currentColor) + + def browseBackgroundColor(self, parent=None): + """ + Show the color dialog for changing the background color. + + :type parent: QtWidgets.QWidget + :rtype: None + """ + standardColors = [ + (0, 0, 0), (20, 20, 20), (40, 40, 40), (60, 60, 60), + (80, 80, 80), (100, 100, 100), (20, 20, 30), (40, 40, 50), + (60, 60, 70), (80, 80, 90), (100, 100, 110), (120, 120, 130), + (0, 30, 60), (20, 50, 80), (40, 70, 100), (60, 90, 120), + (80, 110, 140), (100, 130, 160), (0, 60, 60), (20, 80, 80), + (40, 100, 100), (60, 120, 120), (80, 140, 140), (100, 160, 160), + (0, 60, 30), (20, 80, 50), (40, 100, 70), (60, 120, 90), + (80, 140, 110), (100, 160, 130), (60, 0, 10), (80, 20, 30), + (100, 40, 50), (120, 60, 70), (140, 80, 90), (160, 100, 110), + (60, 0, 40), (80, 20, 60), (100, 40, 80), (120, 60, 100), + (140, 80, 120), (160, 100, 140), (40, 15, 5), (60, 35, 25), + (80, 55, 45), (100, 75, 65), (120, 95, 85), (140, 115, 105) + ] + + currentColor = self.backgroundColor() + + dialog = self.createColorDialog(parent, standardColors, currentColor) + dialog.currentColorChanged.connect(self.setBackgroundColor) + + if dialog.exec_(): + self.setBackgroundColor(dialog.selectedColor()) + else: + self.setBackgroundColor(currentColor) + + def options(self): + """ + Return the variables used to customise the style sheet. + + :rtype: dict + """ + accentColor = self.accentColor() + accentForegroundColor = self.accentForgroundColor() + + foregroundColor = self.foregroundColor() + backgroundColor = self.backgroundColor() + + itemBackgroundColor = self.itemBackgroundColor() + itemBackgroundHoverColor = self.itemBackgroundHoverColor() + + if self.isDark(): + darkness = "white" + else: + darkness = "black" + + resourceDirname = studiolibrary.resource.RESOURCE_DIRNAME + resourceDirname = resourceDirname.replace("\\", "/") + + options = { + "DARKNESS": darkness, + "RESOURCE_DIRNAME": resourceDirname, + + "ACCENT_COLOR": accentColor.toString(), + "ACCENT_COLOR_R": str(accentColor.red()), + "ACCENT_COLOR_G": str(accentColor.green()), + "ACCENT_COLOR_B": str(accentColor.blue()), + + "ACCENT_FOREGROUND_COLOR": accentForegroundColor.toString(), + + "FOREGROUND_COLOR": foregroundColor.toString(), + "FOREGROUND_COLOR_R": str(foregroundColor.red()), + "FOREGROUND_COLOR_G": str(foregroundColor.green()), + "FOREGROUND_COLOR_B": str(foregroundColor.blue()), + + "BACKGROUND_COLOR": backgroundColor.toString(), + "BACKGROUND_COLOR_R": str(backgroundColor.red()), + "BACKGROUND_COLOR_G": str(backgroundColor.green()), + "BACKGROUND_COLOR_B": str(backgroundColor.blue()), + + "ITEM_TEXT_COLOR": foregroundColor.toString(), + "ITEM_TEXT_SELECTED_COLOR": accentForegroundColor.toString(), + + "ITEM_BACKGROUND_COLOR": itemBackgroundColor.toString(), + "ITEM_BACKGROUND_HOVER_COLOR": itemBackgroundHoverColor.toString(), + "ITEM_BACKGROUND_SELECTED_COLOR": accentColor.toString(), + } + + return options + + def styleSheet(self): + """ + Return the style sheet for this theme. + + :rtype: str + """ + options = self.options() + path = studiolibrary.resource.get("css", "default.css") + styleSheet = studioqt.StyleSheet.fromPath(path, options=options, dpi=self.dpi()) + return styleSheet.data() + + +def example(): + """ + Run a simple example of theme menu. + + :rtype: None + """ + theme = showThemesMenu() + print("Accent color:", theme.accentColor()) + print("Background color:", theme.backgroundColor()) + + +if __name__ == "__main__": + with studioqt.app(): + example() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/toastwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/toastwidget.py new file mode 100644 index 0000000..481193b --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrary/widgets/toastwidget.py @@ -0,0 +1,160 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt + + +class ToastWidget(QtWidgets.QLabel): + """ + A toast is a widget containing a quick little message for the user. + + The toast class helps you create and show those. + + Example: + toast = studiolibrary.widgets.ToastWidget(parent) + toast.setDuration(1000) # Show for 1 second + toast.setText("Hello world") + toast.show() + """ + + DEFAULT_DURATION = 500 # 0.5 seconds + + def __init__(self, *args): + QtWidgets.QLabel.__init__(self, *args) + + self._timer = QtCore.QTimer(self) + self._timer.setSingleShot(True) + self._timer.timeout.connect(self.fadeOut) + + self._duration = self.DEFAULT_DURATION + + self.setMouseTracking(True) + self.setAlignment(QtCore.Qt.AlignCenter) + self.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents) + + if self.parent(): + self.parent().installEventFilter(self) + + def eventFilter(self, obj, event): + """ + Update the geometry when the parent widget changes size. + + :type obj: QWidgets.QWidget + :type event: QtCore.QEvent + + :rtype: bool + """ + if event.type() == QtCore.QEvent.Resize: + self.updateGeometry() + return QtWidgets.QLabel.eventFilter(self, obj, event) + + def updateGeometry(self): + """ + Update and align the geometry to the parent widget. + + :rtype: None + """ + padding = 30 + widget = self.parent() + + width = self.textWidth() + padding + height = self.textHeight() + padding + + x = widget.width() / 2 - width / 2 + y = (widget.height() - height) / 1.2 + + self.setGeometry(x, y, width, height) + + def duration(self): + """ + Return the duration. + + :rtype: int + """ + return self._duration + + def setDuration(self, duration): + """ + Set how long to show the toast for in milliseconds. + + :type duration: int + :rtype: None + """ + self._duration = duration + + def fadeOut(self, duration=250): + """ + Fade out the toast message. + + :type duration: int + :rtype: None + """ + studioqt.fadeOut(self, duration=duration, onFinished=self.hide) + + def textRect(self): + """ + Return the bounding box rect for the text. + + :rtype: QtCore.QRect + """ + text = self.text() + font = self.font() + metrics = QtGui.QFontMetricsF(font) + return metrics.boundingRect(text) + + def textWidth(self): + """ + Return the width of the text. + + :rtype: int + """ + textWidth = self.textRect().width() + return max(0, textWidth) + + def textHeight(self): + """ + Return the height of the text. + + :rtype: int + """ + textHeight = self.textRect().height() + return max(0, textHeight) + + def setText(self, text): + """ + Overriding this method to update the size depending on the text width. + + :type text: str + :rtype: None + """ + QtWidgets.QLabel.setText(self, text) + self.updateGeometry() + + def show(self): + """ + Overriding this method to start the timer to hide the toast. + + :rtype: None + """ + duration = self.duration() + + self._timer.stop() + self._timer.start(duration) + + if not self.isVisible(): + # Fade in will reset the alpha effect back to 1. + studioqt.fadeIn(self, duration=0) + QtWidgets.QLabel.show(self) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/BaseLoadWidget.ui b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/BaseLoadWidget.ui new file mode 100644 index 0000000..48d47fe --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/BaseLoadWidget.ui @@ -0,0 +1,454 @@ + + + Form + + + + 0 + 0 + 160 + 560 + + + + + 0 + 0 + + + + + 160 + 560 + + + + + 16777215 + 16777215 + + + + Form + + + + + + + 2 + + + QLayout::SetDefaultConstraint + + + 0 + + + + + + 0 + 24 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 4 + + + 2 + + + 4 + + + 2 + + + + + + 0 + 16 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + + 0 + 1 + + + + + 50 + 50 + + + + + 150 + 150 + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + 4 + + + 0 + + + 2 + + + + + + + + + + + + + + + + + 0 + 16 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + + + + + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + QFrame::Raised + + + 0 + + + + 0 + + + 0 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 1 + + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 80 + 35 + + + + + 125 + 35 + + + + + Arial + 12 + 50 + false + + + + + + + + + + Apply + + + + + + + + 0 + 0 + + + + + 35 + 35 + + + + + 35 + 16777215 + + + + + + + + icons/selectionSet2.pngicons/selectionSet2.png + + + + 25 + 25 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + 0 + 2 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + + + + + + snapshot() + apply() + edit() + showContextMenu() + + diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/BaseSaveWidget.ui b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/BaseSaveWidget.ui new file mode 100644 index 0000000..5ac4599 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/BaseSaveWidget.ui @@ -0,0 +1,304 @@ + + + Form + + + + 0 + 0 + 167 + 473 + + + + + 0 + 0 + + + + + 160 + 0 + + + + + 16777215 + 16777215 + + + + Create Item + + + + + + + 4 + + + 0 + + + + + + 0 + 24 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + + + + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 50 + 150 + + + + + 150 + 150 + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 0 + + + 2 + + + 0 + + + 2 + + + + + + + + + + + 0 + 16 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + 4 + + + 2 + + + 4 + + + 2 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 80 + 35 + + + + + 140 + 35 + + + + + Arial + 12 + 50 + false + + + + + + + + + + Save + + + + + + + + 35 + 35 + + + + + 5 + 16777215 + + + + + + + + icons/selectionSet2.pngicons/selectionSet2.png + + + + 25 + 25 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 2 + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + + + + snapshot() + save() + + diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/README.md b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/README.md new file mode 100644 index 0000000..e4d8bd7 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/README.md @@ -0,0 +1,109 @@ +# Studio Library Items + +Items are used for loading and saving data. + + +### Pose Item + +Saving and loading a pose items + +```python +from studiolibrarymaya import poseitem + +path = "/AnimLibrary/Characters/Malcolm/malcolm.pose" +objects = maya.cmds.ls(selection=True) or [] +namespaces = [] + +# Saving a pose item +poseitem.save(path, objects=objects) + +# Loading a pose item +poseitem.load(path, objects=objects, namespaces=namespaces, key=True, mirror=False) +``` + +### Animation Item + +Saving and loading animation items + +```python +from studiolibrarymaya import animitem + +path = "/AnimLibrary/Characters/Malcolm/malcolm.anim" +objects = maya.cmds.ls(selection=True) or [] + +# Saving an animation item +animitem.save(path, objects=objects, frameRange=(0, 200), bakeConnected=False) + +# Loading an animation item +animitem.load(path, objects=objects, option="replace all", connect=False, currentTime=False) +``` + +Loading an animation to multiple namespaces + +```python +from studiolibrarymaya import animitem +animitem.load(path, namespaces=["character1", "character2"], option="replace all") +``` + +### Mirror Table Item + +Saving and loading mirror tables + +```python +from studiolibrarymaya import mirroritem + +path = "/AnimLibrary/Characters/Malcolm/malcolm.mirror" +objects = maya.cmds.ls(selection=True) or [] + +# Saving a mirror table item +mirroritem.save(path, objects=objects, leftSide="Lf", rightSide="Rf") + +# Loading a mirror table item +mirroritem.load(path, objects=objects, namespaces=[], option="swap", animation=True, time=None) +``` + +### Selection Set Item + +Saving and loading selection sets + +```python +from studiolibrarymaya import setsitem + +path = "/AnimLibrary/Characters/Malcolm/malcolm.set" +objects = maya.cmds.ls(selection=True) or [] + +# Saving a selection sets item +setsitem.save(path, objects=objects) + +# Loading a selection sets item +setsitem.load(path, objects=objects, namespaces=[]) +``` + + +### Maya File Item (Development) + +Saving and loading a Maya file item + +This item can be used to load and save any Maya nodes. For example: +locators and geometry. + +```python +from studiolibrarymaya import mayafileitem + +path = "/AnimLibrary/Characters/Malcolm/malcolm.mayafile" +objects = maya.cmds.ls(selection=True) or [] + +# Saving the item to disc +mayafileitem.save(path, objects=objects) + +# Loading the item from disc +mayafileitem.load(path) +``` + +### Example Item + +If you would like to create a custom item for saving and loading different data types, then please have a look at the [exampleitem.py](exampleitem.py) + +When developing a new item you can "Shift + Click" on the shelf icon which will reload all Studio Library modules including your changes to the item. + +Make sure you register any new items using either the "itemRegistry" key in the [config file](../studiolibrary/config/default.json) or by calling `studiolibrary.registerItem(cls)`. diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/__init__.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/__init__.py new file mode 100644 index 0000000..fa43df4 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/__init__.py @@ -0,0 +1,11 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/animitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/animitem.py new file mode 100644 index 0000000..fc92c85 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/animitem.py @@ -0,0 +1,273 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import logging + +from studiolibrarymaya import baseitem + +try: + import mutils + import mutils.gui + import maya.cmds +except ImportError as error: + print(error) + + +logger = logging.getLogger(__name__) + + +def save(path, *args, **kwargs): + """Convenience function for saving an AnimItem.""" + AnimItem(path).safeSave(*args, **kwargs) + + +def load(path, *args, **kwargs): + """Convenience function for loading an AnimItem.""" + AnimItem(path).load(*args, **kwargs) + + +class AnimItem(baseitem.BaseItem): + + NAME = "Animation" + EXTENSION = ".anim" + ICON_PATH = os.path.join(os.path.dirname(__file__), "icons", "animation.png") + TRANSFER_CLASS = mutils.Animation + + def imageSequencePath(self): + """ + Return the image sequence location for playing the animation preview. + + :rtype: str + """ + return self.path() + "/sequence" + + def loadSchema(self): + """ + Get schema used to load the animation item. + + :rtype: list[dict] + """ + schema = super(AnimItem, self).loadSchema() + + anim = mutils.Animation.fromPath(self.path()) + + startFrame = anim.startFrame() or 0 + endFrame = anim.endFrame() or 0 + + value = "{0} - {1}".format(startFrame, endFrame) + schema.insert(3, {"name": "Range", "value": value}) + + schema.extend([ + { + "name": "optionsGroup", + "title": "Options", + "type": "group", + "order": 2, + }, + { + "name": "connect", + "type": "bool", + "inline": True, + "default": False, + "persistent": True, + "label": {"name": ""} + }, + { + "name": "currentTime", + "type": "bool", + "inline": True, + "default": True, + "persistent": True, + "label": {"name": ""} + }, + { + "name": "sourceTime", + "title": "source", + "type": "range", + "default": [startFrame, endFrame], + }, + { + "name": "option", + "type": "enum", + "default": "replace all", + "items": ["replace", "replace all", "insert", "merge"], + "persistent": True, + }, + ]) + + return schema + + def load(self, **kwargs): + """ + Load the animation for the given objects and options. + + :type kwargs: dict + """ + anim = mutils.Animation.fromPath(self.path()) + anim.load( + objects=kwargs.get("objects"), + namespaces=kwargs.get("namespaces"), + attrs=kwargs.get("attrs"), + startFrame=kwargs.get("startFrame"), + sourceTime=kwargs.get("sourceTime"), + option=kwargs.get("option"), + connect=kwargs.get("connect"), + mirrorTable=kwargs.get("mirrorTable"), + currentTime=kwargs.get("currentTime") + ) + + def saveSchema(self): + """ + Get the schema for saving an animation item. + + :rtype: list[dict] + """ + start, end = (1, 100) + + try: + start, end = mutils.currentFrameRange() + except NameError as error: + logger.exception(error) + + return [ + { + "name": "folder", + "type": "path", + "layout": "vertical", + "visible": False, + }, + { + "name": "name", + "type": "string", + "layout": "vertical" + }, + { + "name": "fileType", + "type": "enum", + "layout": "vertical", + "default": "mayaAscii", + "items": ["mayaAscii", "mayaBinary"], + "persistent": True + }, + { + "name": "frameRange", + "type": "range", + "layout": "vertical", + "default": [start, end], + "actions": [ + { + "name": "From Timeline", + "callback": mutils.playbackFrameRange + }, + { + "name": "From Selected Timeline", + "callback": mutils.selectedFrameRange + }, + { + "name": "From Selected Objects", + "callback": mutils.selectedObjectsFrameRange + }, + ] + }, + { + "name": "byFrame", + "type": "int", + "default": 1, + "layout": "vertical", + "persistent": True + }, + { + "name": "comment", + "type": "text", + "layout": "vertical" + }, + { + "name": "bakeConnected", + "type": "bool", + "default": False, + "persistent": True, + "inline": True, + "label": {"visible": False} + }, + { + "name": "objects", + "type": "objects", + "label": { + "visible": False + } + }, + ] + + def saveValidator(self, **kwargs): + """ + The save validator is called when an input field has changed. + + :type kwargs: dict + :rtype: list[dict] + """ + fields = super(AnimItem, self).saveValidator(**kwargs) + + # Validate the by frame field + if kwargs.get("byFrame") == '' or kwargs.get("byFrame", 1) < 1: + fields.extend([ + { + "name": "byFrame", + "error": "The by frame value cannot be less than 1!" + } + ]) + + # Validate the frame range field + start, end = kwargs.get("frameRange", (0, 1)) + if start >= end: + fields.extend([ + { + "name": "frameRange", + "error": "The start frame cannot be greater " + "than or equal to the end frame!" + } + ]) + + # Validate the current selection field + objects = kwargs.get("objects") + if objects and mutils.getDurationFromNodes(objects, time=[start, end]) <= 0: + fields.extend([ + { + "name": "objects", + "error": "No animation was found on the selected object/s!" + "Please create a pose instead!", + } + ]) + + return fields + + def save(self, objects, sequencePath="", **kwargs): + """ + Save the animation from the given objects to the item path. + + :type objects: list[str] + :type sequencePath: str + :type kwargs: dict + """ + super(AnimItem, self).save(**kwargs) + + # Save the animation to the given path location on disc + mutils.saveAnim( + objects, + self.path(), + time=kwargs.get("frameRange"), + fileType=kwargs.get("fileType"), + iconPath=kwargs.get("thumbnail"), + metadata={"description": kwargs.get("comment", "")}, + sequencePath=sequencePath, + bakeConnected=kwargs.get("bakeConnected") + ) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/baseitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/baseitem.py new file mode 100644 index 0000000..0f236b4 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/baseitem.py @@ -0,0 +1,445 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import shutil +import logging + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore + +import studiolibrary + +from studiolibrarymaya import basesavewidget +from studiolibrarymaya import baseloadwidget + +try: + import mutils + import mutils.gui + import maya.cmds +except ImportError as error: + print(error) + + +logger = logging.getLogger(__name__) + + +class BaseItemSignals(QtCore.QObject): + """""" + loadValueChanged = QtCore.Signal(object, object) + + +class BaseItem(studiolibrary.LibraryItem): + + _baseItemSignals = BaseItemSignals() + + loadValueChanged = _baseItemSignals.loadValueChanged + + """Base class for anim, pose, mirror and sets transfer items.""" + SAVE_WIDGET_CLASS = basesavewidget.BaseSaveWidget + LOAD_WIDGET_CLASS = baseloadwidget.BaseLoadWidget + + TRANSFER_CLASS = None + TRANSFER_BASENAME = "" + + def createLoadWidget(self, parent=None): + widget = self.LOAD_WIDGET_CLASS(item=self, parent=parent) + return widget + + @classmethod + def createSaveWidget(cls, parent=None, item=None): + item = item or cls() + widget = cls.SAVE_WIDGET_CLASS(item=item, parent=parent) + return widget + + @classmethod + def showSaveWidget(cls, libraryWindow=None, item=None): + """ + Overriding this method to set the destination location + for the save widget. + + Triggered when the user clicks the item action in the new item menu. + + :type libraryWindow: studiolibrary.LibraryWindow + :type item: studiolibrary.LibraryItem or None + """ + item = item or cls() + widget = cls.SAVE_WIDGET_CLASS(item=item, parent=libraryWindow) + + if libraryWindow: + path = libraryWindow.selectedFolderPath() + + widget.setFolderPath(path) + widget.setLibraryWindow(libraryWindow) + + libraryWindow.setCreateWidget(widget) + libraryWindow.folderSelectionChanged.connect(widget.setFolderPath) + + def __init__(self, *args, **kwargs): + """ + Initialise a new instance for the given path. + + :type path: str + :type args: list + :type kwargs: dict + """ + self._transferObject = None + self._currentLoadValues = {} + + studiolibrary.LibraryItem.__init__(self, *args, **kwargs) + + def emitLoadValueChanged(self, field, value): + """ + Emit the load value changed to be validated. + + :type field: str + :type value: object + """ + self.loadValueChanged.emit(field, value) + + def namespaces(self): + """ + Return the namesapces for this item depending on the namespace option. + + :rtype: list[str] or None + """ + return self.currentLoadValue("namespaces") + + def namespaceOption(self): + """ + Return the namespace option for this item. + + :rtype: NamespaceOption or None + """ + return self.currentLoadValue("namespaceOption") + + def doubleClicked(self): + """ + This method is called when the user double clicks the item. + + :rtype: None + """ + self.loadFromCurrentValues() + + def transferPath(self): + """ + Return the disc location to transfer path. + + :rtype: str + """ + if self.TRANSFER_BASENAME: + return os.path.join(self.path(), self.TRANSFER_BASENAME) + else: + return self.path() + + def transferObject(self): + """ + Return the transfer object used to read and write the data. + + :rtype: mutils.TransferObject + """ + if not self._transferObject: + path = self.transferPath() + self._transferObject = self.TRANSFER_CLASS.fromPath(path) + return self._transferObject + + def currentLoadValue(self, name): + """ + Get the current field value for the given name. + + :type name: str + :rtype: object + """ + return self._currentLoadValues.get(name) + + def setCurrentLoadValues(self, values): + """ + Set the current field values for the the item. + + :type values: dict + """ + self._currentLoadValues = values + + def loadFromCurrentValues(self): + """Load the mirror table using the settings for this item.""" + kwargs = self._currentLoadValues + objects = maya.cmds.ls(selection=True) or [] + + try: + self.load(objects=objects, **kwargs) + except Exception as error: + self.showErrorDialog("Item Error", str(error)) + raise + + def contextMenu(self, menu, items=None): + """ + This method is called when the user right clicks on this item. + + :type menu: QtWidgets.QMenu + :type items: list[BaseItem] + :rtype: None + """ + from studiolibrarymaya import setsmenu + + action = setsmenu.selectContentAction(self, parent=menu) + menu.addAction(action) + menu.addSeparator() + + subMenu = self.createSelectionSetsMenu(menu, enableSelectContent=False) + menu.addMenu(subMenu) + menu.addSeparator() + + studiolibrary.LibraryItem.contextMenu(self, menu, items=items) + + def showSelectionSetsMenu(self, **kwargs): + """ + Show the selection sets menu for this item at the cursor position. + + :rtype: QtWidgets.QAction + """ + menu = self.createSelectionSetsMenu(**kwargs) + position = QtGui.QCursor().pos() + action = menu.exec_(position) + return action + + def createSelectionSetsMenu(self, parent=None, enableSelectContent=True): + """ + Get a new instance of the selection sets menu. + + :type parent: QtWidgets.QWidget + :type enableSelectContent: bool + :rtype: QtWidgets.QMenu + """ + from . import setsmenu + + parent = parent or self.libraryWindow() + + namespaces = self.namespaces() + + menu = setsmenu.SetsMenu( + item=self, + parent=parent, + namespaces=namespaces, + enableSelectContent=enableSelectContent, + ) + + return menu + + def selectContent(self, namespaces=None, **kwargs): + """ + Select the contents of this item in the Maya scene. + + :type namespaces: list[str] + """ + namespaces = namespaces or self.namespaces() + + kwargs = kwargs or mutils.selectionModifiers() + + msg = "Select content: Item.selectContent(namespacea={0}, kwargs={1})" + msg = msg.format(namespaces, kwargs) + logger.debug(msg) + + try: + self.transferObject().select(namespaces=namespaces, **kwargs) + except Exception as error: + self.showErrorDialog("Item Error", str(error)) + raise + + def loadSchema(self): + """ + Get schema used to load the item. + + :rtype: list[dict] + """ + modified = self.itemData().get("modified") + if modified: + modified = studiolibrary.timeAgo(modified) + + count = self.transferObject().objectCount() + plural = "s" if count > 1 else "" + contains = str(count) + " Object" + plural + + return [ + { + "name": "infoGroup", + "title": "Info", + "type": "group", + "order": 1, + }, + { + "name": "name", + "value": self.name(), + }, + { + "name": "owner", + "value": self.transferObject().owner(), + }, + { + "name": "created", + "value": modified, + }, + { + "name": "contains", + "value": contains, + }, + { + "name": "comment", + "value": self.transferObject().description() or "No comment", + }, + { + "name": "namespaceGroup", + "title": "Namespace", + "type": "group", + "order": 10, + }, + { + "name": "namespaceOption", + "title": "", + "type": "radio", + "value": "From file", + "items": ["From file", "From selection", "Use custom"], + "persistent": True, + "persistentKey": "BaseItem", + }, + { + "name": "namespaces", + "title": "", + "type": "tags", + "value": [], + "items": mutils.namespace.getAll(), + "persistent": True, + "label": {"visible": False}, + "persistentKey": "BaseItem", + }, + ] + + def loadValidator(self, **values): + """ + Called when the load fields change. + + :type values: dict + """ + namespaces = values.get("namespaces") + namespaceOption = values.get("namespaceOption") + + if namespaceOption == "From file": + namespaces = self.transferObject().namespaces() + elif namespaceOption == "From selection": + namespaces = mutils.namespace.getFromSelection() + + fieldChanged = values.get("fieldChanged") + if fieldChanged == "namespaces": + values["namespaceOption"] = "Use custom" + else: + values["namespaces"] = namespaces + + self._currentLoadValues = values + + return [ + { + "name": "namespaces", + "value": values.get("namespaces"), + }, + { + "name": "namespaceOption", + "value": values.get("namespaceOption"), + }, + ] + + def load(self, **kwargs): + """ + Load the data from the transfer object. + + :rtype: None + """ + logger.debug(u'Loading: {0}'.format(self.transferPath())) + + self.transferObject().load(**kwargs) + + logger.debug(u'Loading: {0}'.format(self.transferPath())) + + def saveSchema(self): + """ + The base save schema. + + :rtype: list[dict] + """ + return [ + { + "name": "folder", + "type": "path", + "layout": "vertical", + "visible": False, + }, + { + "name": "name", + "type": "string", + "layout": "vertical", + }, + { + "name": "comment", + "type": "text", + "layout": "vertical" + }, + { + "name": "objects", + "type": "objects", + "label": {"visible": False} + }, + ] + + def saveValidator(self, **kwargs): + """ + The save validator is called when an input field has changed. + + :type kwargs: dict + :rtype: list[dict] + """ + fields = [] + + if not kwargs.get("folder"): + fields.append({ + "name": "folder", + "error": "No folder selected. Please select a destination folder.", + }) + + if not kwargs.get("name"): + fields.append({ + "name": "name", + "error": "No name specified. Please set a name before saving.", + }) + + selection = maya.cmds.ls(selection=True) or [] + msg = "" + if not selection: + msg = "No objects selected. Please select at least one object." + + fields.append({ + "name": "objects", + "value": selection, + "error": msg, + }, + ) + + return fields + + def save(self, thumbnail="", **kwargs): + """ + Save all the given object data to the item path on disc. + + :type thumbnail: str + :type kwargs: dict + """ + # Copy the icon path to the given path + if thumbnail: + basename = os.path.basename(thumbnail) + shutil.copyfile(thumbnail, self.path() + "/" + basename) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/baseloadwidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/baseloadwidget.py new file mode 100644 index 0000000..5598e5c --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/baseloadwidget.py @@ -0,0 +1,255 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import logging + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary +import studiolibrary.widgets + +try: + import mutils + import mutils.gui + import maya.cmds +except ImportError as error: + print(error) + + +logger = logging.getLogger(__name__) + + +class BaseLoadWidget(QtWidgets.QWidget): + + """Base widget for loading items.""" + + def __init__(self, item, parent=None): + """ + :type item: studiolibrarymaya.BaseItem + :type parent: QtWidgets.QWidget or None + """ + QtWidgets.QWidget.__init__(self, parent) + + self.setObjectName("studioLibraryBaseLoadWidget") + self.setWindowTitle("Load Item") + + self.loadUi() + + self._item = item + self._scriptJob = None + self._formWidget = None + + widget = self.createTitleWidget() + widget.ui.menuButton.clicked.connect(self.showMenu) + + self.ui.titleFrame.layout().addWidget(widget) + + # Create the icon group box + groupBox = studiolibrary.widgets.GroupBoxWidget("Icon", self.ui.iconFrame) + groupBox.setObjectName("iconGroupBoxWidget") + groupBox.setPersistent(True) + self.ui.iconTitleFrame.layout().addWidget(groupBox) + + # Create the thumbnail widget and set the image + self.ui.thumbnailButton = studiolibrary.widgets.ImageSequenceWidget(self) + self.ui.thumbnailButton.setObjectName("thumbnailButton") + self.ui.thumbnailFrame.layout().insertWidget(0, self.ui.thumbnailButton) + + if os.path.exists(item.imageSequencePath()): + self.ui.thumbnailButton.setPath(item.imageSequencePath()) + + elif os.path.exists(item.thumbnailPath()): + self.ui.thumbnailButton.setPath(item.thumbnailPath()) + + # Create the load widget and set the load schema + self._formWidget = studiolibrary.widgets.FormWidget(self) + self._formWidget.setObjectName(item.__class__.__name__ + "Form") + self._formWidget.setSchema(item.loadSchema()) + self._formWidget.setValidator(self.loadValidator) + self._formWidget.validate() + + self.ui.formFrame.layout().addWidget(self._formWidget) + + try: + self.selectionChanged() + self.setScriptJobEnabled(True) + except NameError as error: + logger.exception(error) + + self.updateThumbnailSize() + + self._item.loadValueChanged.connect(self._itemValueChanged) + self.ui.acceptButton.clicked.connect(self.accept) + self.ui.selectionSetButton.clicked.connect(self.showSelectionSetsMenu) + + def loadValidator(self, *args, **kwargs): + return self.item().loadValidator(*args, **kwargs) + + def createTitleWidget(self): + """ + Create a new instance of the title bar widget. + + :rtype: QtWidgets.QFrame + """ + class UI(object): + """Proxy class for attaching ui widgets as properties.""" + pass + + titleWidget = QtWidgets.QFrame(self) + titleWidget.setObjectName("titleWidget") + titleWidget.ui = UI() + + vlayout = QtWidgets.QVBoxLayout() + vlayout.setSpacing(0) + vlayout.setContentsMargins(0, 0, 0, 0) + + hlayout = QtWidgets.QHBoxLayout() + hlayout.setSpacing(0) + hlayout.setContentsMargins(0, 0, 0, 0) + + vlayout.addLayout(hlayout) + + titleButton = QtWidgets.QLabel(self) + titleButton.setText(self.item().NAME) + titleButton.setObjectName("titleButton") + titleWidget.ui.titleButton = titleButton + + hlayout.addWidget(titleButton) + + menuButton = QtWidgets.QPushButton(self) + menuButton.setText("...") + menuButton.setObjectName("menuButton") + titleWidget.ui.menuButton = menuButton + + hlayout.addWidget(menuButton) + + titleWidget.setLayout(vlayout) + + return titleWidget + + def _itemValueChanged(self, field, value): + """ + Triggered when the a field value has changed. + + :type field: str + :type value: object + """ + self._formWidget.setValue(field, value) + + def showMenu(self): + """ + Show the edit menu at the current cursor position. + + :rtype: QtWidgets.QAction + """ + menu = QtWidgets.QMenu(self) + + self.item().contextEditMenu(menu) + + point = QtGui.QCursor.pos() + point.setX(point.x() + 3) + point.setY(point.y() + 3) + + return menu.exec_(point) + + def loadUi(self): + """Convenience method for loading the .ui file.""" + studioqt.loadUi(self, cls=BaseLoadWidget) + + def formWidget(self): + """ + Get the form widget instance. + + :rtype: studiolibrary.widgets.formwidget.FormWidget + """ + return self._formWidget + + def setCustomWidget(self, widget): + """Convenience method for adding a custom widget when loading.""" + self.ui.customWidgetFrame.layout().addWidget(widget) + + def item(self): + """ + Get the library item to be created. + + :rtype: studiolibrarymaya.BaseItem + """ + return self._item + + def showSelectionSetsMenu(self): + """Show the selection sets menu.""" + item = self.item() + item.showSelectionSetsMenu() + + def resizeEvent(self, event): + """ + Overriding to adjust the image size when the widget changes size. + + :type event: QtCore.QSizeEvent + """ + self.updateThumbnailSize() + + def updateThumbnailSize(self): + """Update the thumbnail button to the size of the widget.""" + width = self.width() - 10 + if width > 250: + width = 250 + + size = QtCore.QSize(width, width) + self.ui.thumbnailButton.setIconSize(size) + self.ui.thumbnailButton.setMaximumSize(size) + self.ui.thumbnailFrame.setMaximumSize(size) + + def close(self): + """Overriding this method to disable the script job when closed.""" + self.setScriptJobEnabled(False) + + if self.formWidget(): + self.formWidget().savePersistentValues() + + QtWidgets.QWidget.close(self) + + def scriptJob(self): + """ + Get the script job object used when the users selection changes. + + :rtype: mutils.ScriptJob + """ + return self._scriptJob + + def setScriptJobEnabled(self, enabled): + """ + Enable the script job used when the users selection changes. + + :type enabled: bool + """ + if enabled: + if not self._scriptJob: + event = ['SelectionChanged', self.selectionChanged] + self._scriptJob = mutils.ScriptJob(event=event) + else: + sj = self.scriptJob() + if sj: + sj.kill() + self._scriptJob = None + + def selectionChanged(self): + """Triggered when the users Maya selection has changed.""" + self.formWidget().validate() + + def accept(self): + """Called when the user clicks the apply button.""" + self.item().loadFromCurrentValues() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/basesavewidget.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/basesavewidget.py new file mode 100644 index 0000000..e14210c --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/basesavewidget.py @@ -0,0 +1,488 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import logging + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +import studioqt +import studiolibrary.widgets + +try: + import mutils + import mutils.gui + import maya.cmds +except ImportError as error: + print(error) + + +logger = logging.getLogger(__name__) + + +class BaseSaveWidget(QtWidgets.QWidget): + + """Base widget for saving new items.""" + + def __init__(self, item, parent=None): + """ + :type item: studiolibrarymaya.BaseItem + :type parent: QtWidgets.QWidget or None + """ + QtWidgets.QWidget.__init__(self, parent) + + self.setObjectName("studioLibraryBaseSaveWidget") + self.setWindowTitle("Save Item") + + studioqt.loadUi(self) + + self._item = item + self._scriptJob = None + self._formWidget = None + + widget = self.createTitleWidget() + widget.ui.menuButton.hide() + self.ui.titleFrame.layout().addWidget(widget) + + self.ui.acceptButton.clicked.connect(self.accept) + self.ui.selectionSetButton.clicked.connect(self.showSelectionSetsMenu) + + try: + self.setScriptJobEnabled(True) + except NameError as error: + logger.exception(error) + + self.createSequenceWidget() + self.updateThumbnailSize() + self.setItem(item) + + def showMenu(self): + """ + Show the edit menu at the current cursor position. + + :rtype: QtWidgets.QAction + """ + raise NotImplementedError("The title menu is not implemented") + + def createTitleWidget(self): + """ + Create a new instance of the title bar widget. + + :rtype: QtWidgets.QFrame + """ + + class UI(object): + """Proxy class for attaching ui widgets as properties.""" + pass + + titleWidget = QtWidgets.QFrame(self) + titleWidget.setObjectName("titleWidget") + titleWidget.ui = UI() + + vlayout = QtWidgets.QVBoxLayout() + vlayout.setSpacing(0) + vlayout.setContentsMargins(0, 0, 0, 0) + + hlayout = QtWidgets.QHBoxLayout() + hlayout.setSpacing(0) + hlayout.setContentsMargins(0, 0, 0, 0) + + vlayout.addLayout(hlayout) + + titleButton = QtWidgets.QLabel(self) + titleButton.setText(self.item().NAME) + titleButton.setObjectName("titleButton") + titleWidget.ui.titleButton = titleButton + + hlayout.addWidget(titleButton) + + menuButton = QtWidgets.QPushButton(self) + menuButton.setText("...") + menuButton.setObjectName("menuButton") + titleWidget.ui.menuButton = menuButton + + hlayout.addWidget(menuButton) + + titleWidget.setLayout(vlayout) + + return titleWidget + + def createSequenceWidget(self): + """Create a sequence widget to replace the static thumbnail widget.""" + theme = None + if self.parent(): + try: + theme = self.parent().theme() + except AttributeError as error: + logger.debug("Cannot find theme for parent.") + + self.ui.thumbnailButton = studiolibrary.widgets.ImageSequenceWidget(self, theme=theme) + self.ui.thumbnailButton.setObjectName("thumbnailButton") + self.ui.thumbnailFrame.layout().insertWidget(0, self.ui.thumbnailButton) + self.ui.thumbnailButton.clicked.connect(self.thumbnailCapture) + + text = "Click to capture a thumbnail from the current model panel.\n" \ + "CTRL + Click to show the capture window for better framing." + + self.ui.thumbnailButton.setToolTip(text) + + path = studiolibrary.resource.get("icons", "camera.svg") + self.ui.thumbnailButton.addAction( + path, + "Capture new image", + "Capture new image", + self.thumbnailCapture + ) + + path = studiolibrary.resource.get("icons", "expand.svg") + self.ui.thumbnailButton.addAction( + path, + "Show Capture window", + "Show Capture window", + self.showCaptureWindow + ) + + path = studiolibrary.resource.get("icons", "folder.svg") + self.ui.thumbnailButton.addAction( + path, + "Load image from disk", + "Load image from disk", + self.showBrowseImageDialog + ) + + icon = studiolibrary.resource.icon("thumbnail_solid.png") + self.ui.thumbnailButton.setIcon(icon) + + def setLibraryWindow(self, libraryWindow): + """ + Set the library widget for the item. + + :type libraryWindow: studiolibrary.LibraryWindow + :rtype: None + """ + self.item().setLibraryWindow(libraryWindow) + + def libraryWindow(self): + """ + Get the library widget for the item. + + :rtype: libraryWindow: studiolibrary.LibraryWindow + """ + return self.item().libraryWindow() + + def formWidget(self): + """ + Get the form widget instance. + + :rtype: studiolibrary.widgets.formwidget.FormWidget + """ + return self._formWidget + + def item(self): + """ + Get the library item to be created. + + :rtype: studiolibrarymaya.BaseItem + """ + return self._item + + def setItem(self, item): + """ + Set the item to be created. + + :type item: studiolibrarymaya.BaseItem + """ + self._item = item + + if os.path.exists(item.imageSequencePath()): + self.setThumbnailPath(item.imageSequencePath()) + elif not item.isTHUMBNAIL_PATH(): + self.setThumbnailPath(item.thumbnailPath()) + + schema = item.saveSchema() + if schema: + formWidget = studiolibrary.widgets.FormWidget(self) + formWidget.setSchema(schema) + formWidget.setValidator(item.saveValidator) + + # Used when overriding the item + name = os.path.basename(item.path()) + formWidget.setValues({"name": name}) + + self.ui.optionsFrame.layout().addWidget(formWidget) + self._formWidget = formWidget + + formWidget.validate() + else: + self.ui.optionsFrame.setVisible(False) + + def showSelectionSetsMenu(self): + """ + Show the selection sets menu for the current folder path. + + :rtype: None + """ + from studiolibrarymaya import setsmenu + + path = self.folderPath() + position = QtGui.QCursor().pos() + libraryWindow = self.libraryWindow() + + menu = setsmenu.SetsMenu.fromPath(path, libraryWindow=libraryWindow) + menu.exec_(position) + + def close(self): + """Overriding the close method to disable the script job on close.""" + self._formWidget.savePersistentValues() + self.setScriptJobEnabled(False) + QtWidgets.QWidget.close(self) + + def scriptJob(self): + """ + Get the script job object used when the users selection changes. + + :rtype: mutils.ScriptJob + """ + return self._scriptJob + + def setScriptJobEnabled(self, enabled): + """Set the script job used when the users selection changes.""" + if enabled: + if not self._scriptJob: + event = ['SelectionChanged', self.selectionChanged] + self._scriptJob = mutils.ScriptJob(event=event) + else: + sj = self.scriptJob() + if sj: + sj.kill() + self._scriptJob = None + + def resizeEvent(self, event): + """ + Overriding to adjust the image size when the widget changes size. + + :type event: QtCore.QSizeEvent + """ + self.updateThumbnailSize() + + def updateThumbnailSize(self): + """Update the thumbnail button to the size of the widget.""" + width = self.width() - 10 + if width > 250: + width = 250 + + size = QtCore.QSize(width, width) + self.ui.thumbnailButton.setIconSize(size) + self.ui.thumbnailButton.setMaximumSize(size) + self.ui.thumbnailFrame.setMaximumSize(size) + + def setFolderPath(self, path): + """ + Set the destination folder path. + + :type path: str + """ + self.formWidget().setValue("folder", path) + + def folderPath(self): + """ + Return the folder path. + + :rtype: str + """ + return self.formWidget().value("folder") + + def selectionChanged(self): + """Triggered when the Maya selection changes.""" + if self.formWidget(): + self.formWidget().validate() + + def showByFrameDialog(self): + """ + Show the by frame dialog. + + :rtype: None or QtWidgets.QDialogButtonBox.StandardButton + """ + result = None + text = 'To help speed up the playblast you can set the "by frame" ' \ + 'to a number greater than 1. For example if the "by frame" ' \ + 'is set to 2 it will playblast every second frame.' + + options = self.formWidget().values() + byFrame = options.get("byFrame", 1) + startFrame, endFrame = options.get("frameRange", [None, None]) + + duration = 1 + if startFrame is not None and endFrame is not None: + duration = endFrame - startFrame + + if duration > 100 and byFrame == 1: + + buttons = [ + QtWidgets.QDialogButtonBox.Ok, + QtWidgets.QDialogButtonBox.Cancel + ] + + result = studiolibrary.widgets.MessageBox.question( + self.libraryWindow(), + title="Playblast Tip", + text=text, + buttons=buttons, + enableDontShowCheckBox=True, + ) + + return result + + def showBrowseImageDialog(self): + """Show a file dialog for choosing an image from disc.""" + fileDialog = QtWidgets.QFileDialog( + self, + caption="Open Image", + filter="Image Files (*.png *.jpg)" + ) + + fileDialog.fileSelected.connect(self.setThumbnailPath) + fileDialog.exec_() + + def showCaptureWindow(self): + """Show the capture window for framing.""" + self.thumbnailCapture(show=True) + + def setThumbnailPath(self, path): + """ + Set the path to the thumbnail image or the image sequence directory. + + :type path: str + """ + filename, extension = os.path.splitext(path) + dst = studiolibrary.tempPath("thumbnail" + extension) + + studiolibrary.copyPath(path, dst, force=True) + + self.ui.thumbnailButton.setPath(dst) + + def _capturedCallback(self, src): + """ + Triggered when capturing a thumbnail snapshot. + + :type src: str + """ + path = os.path.dirname(src) + self.setThumbnailPath(path) + + def thumbnailCapture(self, show=False): + """Capture a playblast and save it to the temp thumbnail path.""" + options = self.formWidget().values() + startFrame, endFrame = options.get("frameRange", [None, None]) + step = options.get("byFrame", 1) + + # Ignore the by frame dialog when the control modifier is pressed. + if not studioqt.isControlModifier(): + result = self.showByFrameDialog() + if result == QtWidgets.QDialogButtonBox.Cancel: + return + + try: + path = studiolibrary.tempPath("sequence", "thumbnail.jpg") + mutils.gui.thumbnailCapture( + show=show, + path=path, + startFrame=startFrame, + endFrame=endFrame, + step=step, + clearCache=True, + captured=self._capturedCallback, + ) + + except Exception as e: + title = "Error while capturing thumbnail" + studiolibrary.widgets.MessageBox.critical(self.libraryWindow(), title, str(e)) + raise + + def showThumbnailCaptureDialog(self): + """ + Ask the user if they would like to capture a thumbnail. + + :rtype: int + """ + title = "Create a thumbnail" + text = "Would you like to capture a thumbnail?" + + buttons = [ + QtWidgets.QDialogButtonBox.Yes, + QtWidgets.QDialogButtonBox.Ignore, + QtWidgets.QDialogButtonBox.Cancel + ] + + + parent = self.item().libraryWindow() + button = studiolibrary.widgets.MessageBox.question( + parent, + title, + text, + buttons=buttons + ) + + if button == QtWidgets.QDialogButtonBox.Yes: + self.thumbnailCapture() + + return button + + def accept(self): + """Triggered when the user clicks the save button.""" + try: + self.formWidget().validate() + + if self.formWidget().hasErrors(): + raise Exception("\n".join(self.formWidget().errors())) + + hasFrames = self.ui.thumbnailButton.hasFrames() + if not hasFrames: + button = self.showThumbnailCaptureDialog() + if button == QtWidgets.QDialogButtonBox.Cancel: + return + + name = self.formWidget().value("name") + folder = self.formWidget().value("folder") + path = folder + "/" + name + thumbnail = self.ui.thumbnailButton.firstFrame() + + self.save(path=path, thumbnail=thumbnail) + + except Exception as e: + studiolibrary.widgets.MessageBox.critical( + self.libraryWindow(), + "Error while saving", + str(e), + ) + raise + + def save(self, path, thumbnail): + """ + Save the item with the given objects to the given disc location path. + + :type path: str + :type thumbnail: str + """ + kwargs = self.formWidget().values() + sequencePath = self.ui.thumbnailButton.dirname() + + item = self.item() + item.setPath(path) + item.safeSave( + thumbnail=thumbnail, + sequencePath=sequencePath, + **kwargs + ) + self.close() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/exampleitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/exampleitem.py new file mode 100644 index 0000000..1ea28f2 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/exampleitem.py @@ -0,0 +1,92 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . +""" +NOTE: Make sure you register this item in the config. +""" + +import os +import logging + +from studiolibrarymaya import baseitem + + +logger = logging.getLogger(__name__) + + +class ExampleItem(baseitem.BaseItem): + + NAME = "Example" + EXTENSION = ".example" + ICON_PATH = os.path.join(os.path.dirname(__file__), "icons", "pose.png") + + def loadSchema(self, **kwargs): + """ + Get the schema used for loading the example item. + + :rtype: list[dict] + """ + return [ + { + "name": "option", + "type": "bool", + "default": False, + "persistent": True, + }, + ] + + def load(self, **kwargs): + """ + The load method is called with the user values from the load schema. + + :type kwargs: dict + """ + logger.info("Loading %s %s", self.path(), kwargs) + raise NotImplementedError("The load method is not implemented!") + + def saveSchema(self, **kwargs): + """ + Get the schema used for saving the example item. + + :rtype: list[dict] + """ + return [ + # The 'name' field and the 'folder' field are both required by + # the BaseItem. How this is handled may change in the future. + { + "name": "folder", + "type": "path", + "layout": "vertical", + "visible": False, + }, + { + "name": "name", + "type": "string", + "layout": "vertical" + }, + { + "name": "fileType", + "type": "enum", + "layout": "vertical", + "default": "mayaAscii", + "items": ["mayaAscii", "mayaBinary"], + "persistent": True + }, + ] + + def save(self, **kwargs): + """ + The save method is called with the user values from the save schema. + + :type kwargs: dict + """ + logger.info("Saving %s %s", self.path(), kwargs) + raise NotImplementedError("The save method is not implemented!") diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/animation.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/animation.png new file mode 100644 index 0000000000000000000000000000000000000000..84d7e626363213b2f963b331a1d58e1fe6400a63 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@KN#5=*KpF^sI`6IrQk(@Ik;M!Q z+(IDCc=)+Q^VoV$1I=LYboFyt I=akR{09he08~^|S literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/arrow.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..2765a8c3453cbf8beb74be5eae03e91aa38b425f GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVj%qwgcaTYZMYuHO3_HuN_BP~D`KBUSJ4Qcq!B<0ePWMdB}9?l5vrxx;fr z)8kL;1sBFcd_PR07Jq!&P+>1%{rF1Daf7s+M+}p5(-XFeIX?#afWgz%&t;ucLK6T# CZeq&- literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/file.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/file.png new file mode 100644 index 0000000000000000000000000000000000000000..0b457ebbb538b8ea1ad74601191df076f49b31d8 GIT binary patch literal 652 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/merge.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/merge.png new file mode 100644 index 0000000000000000000000000000000000000000..1a54b8233c24978bbe8616d45813d5d03634904b GIT binary patch literal 10379 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/mergeConnect.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/mergeConnect.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3bdcc7669c2cc8b3b3d01b90768ad5bbe9ff40 GIT binary patch literal 11117 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 E0lnfTL;wH) literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/mirrortable.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/mirrortable.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe1b6251819eddb4fea05fde3ac64c5a111d31a GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@KN#5=*KpF^sI`6IrQk(@Ik;M!Q zEHgluF|dy>94N?M;_2(kevgBRiH$+qT|E{k^wQJCF+}5h?}Yt&E`=g3>EFCmv|C)l zE_j%!JmS0}6gAJ$TiL7g`GtUNo3<8lAlcw{xTecCd|j`7`Kcgo_=2m kMhb0<4hp`qaLIRnv%H%xs~vU(13k^)>FVdQ&MBb@0IzU_SO5S3 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/pose.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/pose.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4dfd60e4da060c3f7b1bfe535d7e36160723c5 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@KN#5=*KpF^sI`6IrQk(@Ik;M!Q z+(IDCchfXAwtL z{|S1f_l~50&fOQ4^HxVCGkCeDz@P1A-3dGR_q3*3w9VW**IG+dFxKUb(xTNL{a=}S z*JKOk3Wb|)ayi1zC-H!F{Yl-82Uy&D3XiRHIr47)MgC=(n~rll%?t7uFkc*W>i1&n zgZg^9jt9j5MY*)Uc`g>X;Pvi#^AxsqzMkfJ_{dM^MSqItSN>VIXR-FnPu6qS`zh}Q Px|PAx)z4*}Q$iB}mgH!! literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/replace.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/replace.png new file mode 100644 index 0000000000000000000000000000000000000000..de47f6c0659f6b1d72546f1dc551723c9e8b2c4b GIT binary patch literal 9657 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/selectionSet.png b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/icons/selectionSet.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2d0b62fc29196a74246f870a0e9307abcbe834 GIT binary patch literal 572 zcmV-C0>k}@P)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L00E%@00E%^D2zD700007bV*G`2iye@ z1`ZE!_Ih2{pJuxmK#Z}7G4_FHKnbkao(JaB+yi!EjQtp60gxwx728*V zfuxtVD@he#;H#unVA1xPB!H39_nrfTx~_L)j7z{}V6NjLxBWuWd)wE5i+S?&x~}V8 z0Nb^sv$mDku?=uw`zCM>7-o`|C9MNYCX+%^Vf(S92ey9#B!XW+A!$R>a&EiVw(VZi zG>50t>0Mv}Xp_I&z!lqv5;$+$_Fa}`y$m3PFej;R`$9TFuw5k3W&){ux?IveaN72X zjwdC>90Z%xXx5zj$=>hG7mzxZ!w_cOHA~wbt2>b=F?HC+a|m$RHesgLVP!XlYx}5KEibO9$EGd-k{* z^tz=LpyigH20ho))6=@HW6)DK19<^uZ-~QQpu<4>gGPgPi#}FvQK0gdfEI%u0WAPM z4x{*>;BqQOBMksb{|pXeKwkzO0s2%;th^1n4|Ff+9vH(jHSv)djWGZyeODY#0i6ok zwPtpbuoQGVXgZ8xY2D2DAZP=C(l^FoENEP0n)fDw-NcQcX)uQW*3C>3f;0dqegqEZ zg3gHQYu<|jyNR1YSHcjUubY{m0mbhHnhE+)IuEQ9>$X?ja&AWuEdYeF2M)cUuY)$I zpvZqE{64gTvOfad3F<|Q@MHz$IZ>+tK=GWDPX?U{+OWV!v#DJK`UmL6$PCUnuU`eB zuTps00tXWP1{`ee1R4d}2lVLzdF1r*2GEbd)9VF3H+(?I8-TtCT2(;P`aY-+GzD}N zXmE*q54L4Yv1Ptr0RNN$Wl=@TS3gkEk)Q=Rg|-GX19UQI^BU{2x#eMo zmr8&No(*~@qkuSwng<#S3T|dVo-A+kB>NzivN^l%x)csnYHQHkj6zurx(ZZe|63}^ ztL1rh#yV40Ti0EWLV$`K1X__n2<#gtf;OwW4p~9oZ5^_Vbttog>aIgBpaK&>@20Fc z-Bzo+O}@~%L40W>zH>9z?5YWODm02dAptn8=l!29nFBS%81Y+L&G|HbP4IbSW4KcHYS&cLTF%A&lW}nSn zuQX*qQz66*oO{K;OQ6i_9TQll@AhPvQ<{@&Ww-$l<68EeI?t^2WkTUoJsIWv_psU+ zZ5Svk@%I@_t&7R=o(!%8H7%U0c2H(kc0L$iHFF1xUo*uDjH;Bm4gzK8X#~{8fmJcJ zjrjTY*@W#^2~!;m%252e1L|a(vYFwaZ;q!$9$G3hpCC|{;@9HNDVvdVJec4#raRg% z7-D7zK2yYV%3@$w@eAhYEro$DsDoY)`BO*5E}Rk5^!IrbK3lp@p3-3TFxx{93w-t9 z6%{OInsL2y8KZCa?&;}y)90DKuoc;=$Y(YHD8}q~ z_O~gQogilIWh`7RK(BJ1YuP5<1CaEFpYJ$FaB6X-&R!Q4fx2)__o&PBlTNG$Sjwh2oTe0bRmf>iK54MJ zxJtR~G>M5LjC;$OlgG9Al7(I4&t4Z5;o8VO7NAbY_Wv=?0LCc={Sp@URtmNCM}aBT(3~vwZ?ZB~0yrpSD%OWUk47e? zJB^uB9j1b3umoE(CSBs1gzf8Lvo=hN+~0Ai>#O;nwX*;*Dc6}RKWVKQKPzrg$Mnwz zr2G!_aAcJZK9;9^294p1pkqN_ii*uiSOzl90$Q+9Lo1`?da{)mye`!}ZrE3eFO$@WQFz9KN*VmxyKW3{gz~(3c^L`?u=*7sM$@oWU^433)3ufa zO=pMmpOyh=YxnNY%S~ut^9Q2mj5~~cAJl2y&HI$|YnPI>3_#0Z{ny;=1PVsqf*A44 z0pp!@^HU%+ozd$X^@xcrTN5P@7`R!|h$1=50x>y&caMysnAMx1;^h4UOC0oYaQGBx zY1Sz#%Avpf>ZtfVhteR|Ag~40g-NrAC7fnR*(OvvodT{=@e_F&$pSGmlP`ddj?4&t z&lIaC%L#bP#iAgf`v&aaVUn9$O($G`L zY}{-S&Jtz)9E{*K9F7D%S0YbkLet#{3P4NE`bt5}41kzq$ef2?7**??W7r#W>(E)U zv+F`@1V@2htAeqDp$#OrqXB5kzDn871cJW+hX+7T1(b{fK#Rc3ajuK(hLGIP$h8O~ zL}*4kga)vsdgD#d;%T6k2E%@s+fECI`+hr`g zQ?iH9dF2`lgd9bref4~W2B3X0(!LfBfSp2h(uPo{O7hNT+9HfPq3P~f8o-OnMOpUj zZGyum4fyr&*o1R`j!bw}h|qEdzeEGjzIE@Dq2RA&xF>YPy0C5R;o}wa;)~JB`Da=N z;PP#!iN$NJ=hvc)n}{PF=R#du;L;sitz{e7goCcoq2Xfk2Kl0s`u=usr<9~7H8=yX zIveJ=WC?ZO@&sy4*a0cZ{%neCn}(!>i%(U`g&#DXtu@+~0X(8y{P`3GCuXJW0PLRd zdx)!wwB>$(;Xf?{(3TOo`oI1dmg3r`A<3~7;+H{9XY=__dl&FO$HfPv7zc#0r)@b% zl0i_@KAKwjv;iZ1O;t zKY$O`5=jvuj);pw(qOO7mBjr)9l2gquAE-y{p}wSG(&m#fK;O~$i1vNV605|z1%HZ z)8Q=T{CYtw{SDx^%FTz1Nk{5JscQ*qMv}u!TVPuWtZuX|d#AVmv7P~-Y2ei0F~`lk z-noJX_?vRR$w=xVQ++Qf5!yZvkG1CsjuI}uQ7PoxicdiEDmE1y04BX0BdcU24pt|p zE0+yO^&4jZOfu*S6s4o*Y{&UUQD+VWA9HMyQS4s5*+8ARoN(0XwEjO1FaR6#ev4Ar zc@nexguS0{$^zy7Cc+i@Q)}#_)x~+rWw*o`aO}pBHl&MRxLp0oMR;KBYFXTWVx-R~ znugtzHef`3i_B(1B<>xYP(D{Gxl;M?StIQ-ckhSZt>l+k4T_!qFn$j7ALafg;ZbkF zRSfXPIEB>;|1*>B*Y*u`Ss|O9%i>PhAQP<{X%a$S21XsY`hMzgQl=-va_&$p>q9X+ zS;yT=%X}yQ%U3&|7n9c@IDoH%#pu9=JMt93%w6v*1^iPILZA0jot@ZVQB|9BvGoAMdeUz~9NC~3xc;0aK!ya;6heD!+p zPaT!xn#P0A_h5j1Q*4qY{Cho3f`us*GfO-do8r2yKqrdX zNNO%xu+r=YKduJjhfxOZozkl(`K>IR0kOlbsEWaexlVm^lswG^D&))!*@ zB1uM_r2H@!;7YpgfM9bsSpuDgl?iLWlO^52m$D7(&F>E}yMWD1Q7K}vI?OvC8&HHaC|_)Za9;G1x(1U^d712J3I-zw>+yPUl=ubTtY6U2W?(*mb!+`1*~ zrY;4nAN5I zj+IgK`g>oXaw99w0scF_V1VP7#GuPWjKss`)Cy2S>^bkPO~X$0sx$v?0P0jvY- zGNNv|#vzCt#v4E!!~~dd&d!0?&Y&GZ{LDN^MnSasqQh&E=pMK+l4nv8iu53jYUc-b4BN. +""" +NOTE: Make sure you register this item in the config. +""" + +import os +import logging + +import maya.cmds + +from studiolibrarymaya import baseitem + + +logger = logging.getLogger(__name__) + + +class MayaFileItem(baseitem.BaseItem): + + NAME = "Maya File" + TYPE = NAME + EXTENSION = ".mayafile" + ICON_PATH = os.path.join(os.path.dirname(__file__), "icons", "file.png") + + def transferPath(self): + return self.path() + "/mayafile.ma" + + def loadSchema(self, **kwargs): + """ + Get the schema used for loading the example item. + + :rtype: list[dict] + """ + return [] + + def load(self, **kwargs): + """ + The load method is called with the user values from the load schema. + + :type kwargs: dict + """ + logger.info("Loading %s %s", self.path(), kwargs) + + maya.cmds.file( + self.transferPath(), + i=True, + type="mayaAscii", + options="v=0;", + preserveReferences=True, + mergeNamespacesOnClash=False, + ) + + def saveSchema(self, **kwargs): + """ + Get the schema used for saving the example item. + + :rtype: list[dict] + """ + return [ + # The 'name' field and the 'folder' field are both required by + # the BaseItem. How this is handled may change in the future. + { + "name": "folder", + "type": "path", + "layout": "vertical", + "visible": False, + }, + { + "name": "name", + "type": "string", + "layout": "vertical" + }, + { + "name": "objects", + "type": "objects", + "layout": "vertical" + }, + ] + + def save(self, **kwargs): + """ + The save method is called with the user values from the save schema. + + :type kwargs: dict + """ + logger.info("Saving %s %s", self.path(), kwargs) + + super(MayaFileItem, self).save(**kwargs) + + maya.cmds.file( + self.transferPath(), + type="mayaAscii", + options="v=0;", + preserveReferences=True, + exportSelected=True + ) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mayalibrarywindow.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mayalibrarywindow.py new file mode 100644 index 0000000..6abc13a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mayalibrarywindow.py @@ -0,0 +1,195 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import uuid +import logging + +import maya.cmds +from maya.app.general.mayaMixin import MayaQWidgetDockableMixin + +import studiolibrary +from studiolibrary import librarywindow + +import mutils + + +logger = logging.getLogger(__name__) + + +_mayaCloseScriptJob = None + + +def enableMayaClosedEvent(): + """ + Create a Maya script job to trigger on the event "quitApplication". + + Enable the Maya closed event to save the library settings on close + + :rtype: None + """ + global _mayaCloseScriptJob + + if not _mayaCloseScriptJob: + event = ['quitApplication', mayaClosedEvent] + try: + _mayaCloseScriptJob = mutils.ScriptJob(event=event) + logger.debug("Maya close event enabled") + except NameError as error: + logging.exception(error) + + +def disableMayaClosedEvent(): + """Disable the maya closed event.""" + global _mayaCloseScriptJob + + if _mayaCloseScriptJob: + _mayaCloseScriptJob.kill() + _mayaCloseScriptJob = None + logger.debug("Maya close event disabled") + + +def mayaClosedEvent(): + """ + Create a Maya script job to trigger on the event "quitApplication". + + :rtype: None + """ + for libraryWindow in librarywindow.LibraryWindow.instances(): + libraryWindow.saveSettings() + + +class MayaLibraryWindow(MayaQWidgetDockableMixin, librarywindow.LibraryWindow): + + def destroy(self): + """ + Overriding this method to avoid multiple script jobs when developing. + """ + disableMayaClosedEvent() + librarywindow.LibraryWindow.destroy(self) + + def setObjectName(self, name): + """ + Overriding to ensure the widget has a unique name for Maya. + + :type name: str + :rtype: None + """ + name = '{0}_{1}'.format(name, uuid.uuid4()) + + librarywindow.LibraryWindow.setObjectName(self, name) + + def tabWidget(self): + """ + Return the tab widget for the library widget. + + :rtype: QtWidgets.QTabWidget or None + """ + if self.isDockable(): + return self.parent().parent().parent() + else: + return None + + def workspaceControlName(self): + """ + Return the workspaceControl name for the widget. + + :rtype: str or None + """ + if self.isDockable() and self.parent(): + return self.parent().objectName() + else: + return None + + def isDocked(self): + """ + Convenience method to return if the widget is docked. + + :rtype: bool + """ + return not self.isFloating() + + def isFloating(self): + """ + Return True if the widget is a floating window. + + :rtype: bool + """ + name = self.workspaceControlName() + if name: + try: + return maya.cmds.workspaceControl(name, q=True, floating=True) + except AttributeError: + msg = 'The "maya.cmds.workspaceControl" ' \ + 'command is not supported!' + + logger.warning(msg) + + return True + + def window(self): + """ + Overriding this method to return itself when docked. + + This is used for saving the correct window position and size settings. + + :rtype: QWidgets.QWidget + """ + if self.isDocked(): + return self + else: + return librarywindow.LibraryWindow.window(self) + + def show(self, **kwargs): + """ + Show the library widget as a dockable window. + + Set dockable=False in kwargs if you want to show the widget as a floating window. + + :rtype: None + """ + dockable = kwargs.get('dockable', True) + MayaQWidgetDockableMixin.show(self, dockable=dockable) + self.raise_() + self.fixBorder() + + def resizeEvent(self, event): + """ + Override method to remove the border when the window size has changed. + + :type event: QtCore.QEvent + :rtype: None + """ + if event.isAccepted(): + if not self.isLoaded(): + self.fixBorder() + + def floatingChanged(self, isFloating): + """ + Override method to remove the grey border when the parent has changed. + + Only supported/triggered in Maya 2018 + + :rtype: None + """ + self.fixBorder() + + def fixBorder(self): + """ + Remove the grey border around the tab widget. + + :rtype: None + """ + if self.tabWidget(): + self.tabWidget().setStyleSheet("border:0px;") + + +enableMayaClosedEvent() diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mirroritem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mirroritem.py new file mode 100644 index 0000000..a563198 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/mirroritem.py @@ -0,0 +1,231 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import logging + +from studiolibrarymaya import baseitem + +try: + import mutils + import maya.cmds +except ImportError as error: + print(error) + + +logger = logging.getLogger(__name__) + + +def save(path, *args, **kwargs): + """Convenience function for saving a MirrorItem.""" + MirrorItem(path).safeSave(*args, **kwargs) + + +def load(path, *args, **kwargs): + """Convenience function for loading a MirrorItem.""" + MirrorItem(path).load(*args, **kwargs) + + +class MirrorItem(baseitem.BaseItem): + + NAME = "Mirror Table" + EXTENSION = ".mirror" + ICON_PATH = os.path.join(os.path.dirname(__file__), "icons", "mirrortable.png") + TRANSFER_CLASS = mutils.MirrorTable + TRANSFER_BASENAME = "mirrortable.json" + + def __init__(self, *args, **kwargs): + """ + :type args: list + :type kwargs: dict + """ + super(MirrorItem, self).__init__(*args, **kwargs) + + self._validatedObjects = [] + + def loadSchema(self): + """ + Get schema used to load the mirror table item. + + :rtype: list[dict] + """ + schema = super(MirrorItem, self).loadSchema() + + mt = self.transferObject() + + schema.insert(2, {"name": "Left", "value": mt.leftSide()}) + schema.insert(3, {"name": "Right", "value": mt.rightSide()}) + + schema.extend([ + { + "name": "optionsGroup", + "title": "Options", + "type": "group", + "order": 2, + }, + { + "name": "keysOption", + "title": "Keys", + "type": "radio", + "value": "Selected Range", + "items": ["All Keys", "Selected Range"], + "persistent": True, + }, + { + "name": "option", + "type": "enum", + "default": "swap", + "items": ["swap", "left to right", "right to left"], + "persistent": True + }, + ]) + + return schema + + def load(self, **kwargs): + """ + Load the current mirror table to the given objects. + + :type kwargs: dict + """ + mt = mutils.MirrorTable.fromPath(self.path() + "/mirrortable.json") + mt.load( + objects=kwargs.get("objects"), + namespaces=kwargs.get("namespaces"), + option=kwargs.get("option"), + keysOption=kwargs.get("keysOption"), + time=kwargs.get("time") + ) + + def saveSchema(self): + """ + Get the fields used to save the item. + + :rtype: list[dict] + """ + return [ + { + "name": "folder", + "type": "path", + "layout": "vertical", + "visible": False, + }, + { + "name": "name", + "type": "string", + "layout": "vertical" + }, + { + "name": "mirrorPlane", + "type": "buttonGroup", + "default": "YZ", + "layout": "vertical", + "items": ["YZ", "XY", "XZ"], + }, + { + "name": "leftSide", + "type": "string", + "layout": "vertical", + "menu": { + "name": "0" + } + }, + { + "name": "rightSide", + "type": "string", + "layout": "vertical", + "menu": { + "name": "0" + } + }, + { + "name": "comment", + "type": "text", + "layout": "vertical" + }, + { + "name": "objects", + "type": "objects", + "label": { + "visible": False + } + }, + ] + + def saveValidator(self, **kwargs): + """ + The save validator is called when an input field has changed. + + :type kwargs: dict + :rtype: list[dict] + """ + results = super(MirrorItem, self).saveValidator(**kwargs) + + objects = maya.cmds.ls(selection=True) or [] + + dirty = kwargs.get("fieldChanged") in ["leftSide", "rightSide"] + dirty = dirty or self._validatedObjects != objects + + if dirty: + self._validatedObjects = objects + + leftSide = kwargs.get("leftSide", "") + if not leftSide: + leftSide = mutils.MirrorTable.findLeftSide(objects) + + rightSide = kwargs.get("rightSide", "") + if not rightSide: + rightSide = mutils.MirrorTable.findRightSide(objects) + + mt = mutils.MirrorTable.fromObjects( + [], + leftSide=leftSide, + rightSide=rightSide + ) + + results.extend([ + { + "name": "leftSide", + "value": leftSide, + "menu": { + "name": str(mt.leftCount(objects)) + } + }, + { + "name": "rightSide", + "value": rightSide, + "menu": { + "name": str(mt.rightCount(objects)) + } + }, + ]) + + return results + + def save(self, objects, **kwargs): + """ + Save the given objects to the item path on disc. + + :type objects: list[str] + :type kwargs: dict + """ + super(MirrorItem, self).save(**kwargs) + + # Save the mirror table to the given location + mutils.saveMirrorTable( + self.path() + "/mirrortable.json", + objects, + metadata={"description": kwargs.get("comment", "")}, + leftSide=kwargs.get("leftSide"), + rightSide=kwargs.get("rightSide"), + mirrorPlane=kwargs.get("mirrorPlane"), + ) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/poseitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/poseitem.py new file mode 100644 index 0000000..39050f8 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/poseitem.py @@ -0,0 +1,392 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import logging + +import studiolibrary + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + +from studiolibrarymaya import baseitem +from studiolibrarymaya import baseloadwidget + +try: + import mutils + import maya.cmds +except ImportError as error: + print(error) + + +logger = logging.getLogger(__name__) + + +def save(path, *args, **kwargs): + """Convenience function for saving a PoseItem.""" + PoseItem(path).safeSave(*args, **kwargs) + + +def load(path, *args, **kwargs): + """Convenience function for loading a PoseItem.""" + PoseItem(path).load(*args, **kwargs) + + +class PoseLoadWidget(baseloadwidget.BaseLoadWidget): + + @classmethod + def createFromPath(cls, path, theme=None): + + item = PoseItem(path) + widget = cls(item) + + if not theme: + import studiolibrary.widgets + theme = studiolibrary.widgets.Theme() + widget.setStyleSheet(theme.styleSheet()) + + widget.show() + + def __init__(self, *args, **kwargs): + super(PoseLoadWidget, self).__init__(*args, **kwargs) + + self._options = None + self._pose = mutils.Pose.fromPath(self.item().transferPath()) + + self.ui.blendFrame = QtWidgets.QFrame(self) + + layout = QtWidgets.QHBoxLayout() + self.ui.blendFrame.setLayout(layout) + + if self.item().libraryWindow(): + self.item().libraryWindow().itemsWidget().itemSliderMoved.connect(self._sliderMoved) + self.item().libraryWindow().itemsWidget().itemSliderReleased.connect(self._sliderReleased) + self.item().libraryWindow().itemsWidget().itemDoubleClicked.connect(self._itemDoubleClicked) + + self.ui.blendSlider = QtWidgets.QSlider(self) + self.ui.blendSlider.setObjectName("blendSlider") + self.ui.blendSlider.setMinimum(-30) + self.ui.blendSlider.setMaximum(130) + self.ui.blendSlider.setOrientation(QtCore.Qt.Horizontal) + self.ui.blendSlider.sliderMoved.connect(self._sliderMoved) + self.ui.blendSlider.sliderReleased.connect(self._sliderReleased) + + self.ui.blendEdit = QtWidgets.QLineEdit(self) + self.ui.blendEdit.setObjectName("blendEdit") + self.ui.blendEdit.setText("0") + self.ui.blendEdit.editingFinished.connect(self._blendEditChanged) + + validator = QtGui.QIntValidator(-200, 200, self) + self.ui.blendEdit.setValidator(validator) + + layout.addWidget(self.ui.blendSlider) + layout.addWidget(self.ui.blendEdit) + + self.setCustomWidget(self.ui.blendFrame) + + def _itemDoubleClicked(self): + """Triggered when the user double-clicks a pose.""" + self.accept() + + def _sliderMoved(self, value): + """Triggered when the user moves the slider handle.""" + self.load(blend=value, batchMode=True) + + def _sliderReleased(self): + """Triggered when the user releases the slider handle.""" + try: + self.load(blend=self.ui.blendSlider.value(), refresh=False) + self._options = {} + except Exception as error: + self.item().showErrorDialog("Item Error", str(error)) + raise + + def _blendEditChanged(self, *args): + """Triggered when the user changes the blend edit value.""" + try: + self._options = {} + self.load(blend=int(self.ui.blendEdit.text()), clearSelection=False) + except Exception as error: + self.item().showErrorDialog("Item Error", str(error)) + raise + + def loadValidator(self, *args, **kwargs): + self._options = {} + return super(PoseLoadWidget, self).loadValidator(*args, **kwargs) + + def accept(self): + """Triggered when the user clicks the apply button.""" + try: + self._options = {} + self.load(clearCache=True, clearSelection=False) + except Exception as error: + self.item().showErrorDialog("Item Error", str(error)) + raise + + def load( + self, + blend=100.0, + refresh=True, + batchMode=False, + clearCache=False, + clearSelection=True, + ): + """ + Load the pose item with the current user settings from disc. + + :type blend: float + :type refresh: bool + :type batchMode: bool + :type clearCache: bool + :type clearSelection: bool + """ + if batchMode: + self.formWidget().setValidatorEnabled(False) + else: + self.formWidget().setValidatorEnabled(True) + + if not self._options: + + self._options = self.formWidget().values() + self._options['mirrorTable'] = self.item().mirrorTable() + self._options['objects'] = maya.cmds.ls(selection=True) or [] + + if not self._options["searchAndReplaceEnabled"]: + self._options["searchAndReplace"] = None + + del self._options["namespaceOption"] + del self._options["searchAndReplaceEnabled"] + + self.ui.blendEdit.blockSignals(True) + self.ui.blendSlider.setValue(blend) + self.ui.blendEdit.setText(str(int(blend))) + self.ui.blendEdit.blockSignals(False) + + if self.item().libraryWindow(): + + self.item().libraryWindow().itemsWidget().blockSignals(True) + self.item().setSliderValue(blend) + self.item().libraryWindow().itemsWidget().blockSignals(False) + + if batchMode: + self.item().libraryWindow().showToastMessage("Blend: {0}%".format(blend)) + + try: + self._pose.load( + blend=blend, + refresh=refresh, + batchMode=batchMode, + clearCache=clearCache, + clearSelection=clearSelection, + **self._options + ) + finally: + self.item().setSliderDown(batchMode) + + +def findMirrorTable(path): + """ + Get the mirror table object for this item. + + :rtype: mutils.MirrorTable or None + """ + mirrorTable = None + + mirrorTablePaths = list(studiolibrary.walkup( + path, + match=lambda path: path.endswith(".mirror"), + depth=10, + ) + ) + + if mirrorTablePaths: + mirrorTablePath = mirrorTablePaths[0] + + path = os.path.join(mirrorTablePath, "mirrortable.json") + + if path: + mirrorTable = mutils.MirrorTable.fromPath(path) + + return mirrorTable + + +class PoseItem(baseitem.BaseItem): + + NAME = "Pose" + EXTENSION = ".pose" + ICON_PATH = os.path.join(os.path.dirname(__file__), "icons", "pose.png") + LOAD_WIDGET_CLASS = PoseLoadWidget + TRANSFER_CLASS = mutils.Pose + TRANSFER_BASENAME = "pose.json" + + def __init__(self, *args, **kwargs): + """ + Create a new instance of the pose item from the given path. + + :type path: str + :type args: list + :type kwargs: dict + """ + super(PoseItem, self).__init__(*args, **kwargs) + + self.setSliderEnabled(True) + + def mirrorTableSearchAndReplace(self): + """ + Get the values for search and replace from the mirror table. + + :rtype: (str, str) + """ + mirrorTable = findMirrorTable(self.path()) + + return mirrorTable.leftSide(), mirrorTable.rightSide() + + def switchSearchAndReplace(self): + """ + Switch the values of the search and replace field. + + :rtype: (str, str) + """ + values = self.currentLoadValue("searchAndReplace") + return values[1], values[0] + + def clearSearchAndReplace(self): + """ + Clear the search and replace field. + + :rtype: (str, str) + """ + return '', '' + + def doubleClicked(self): + """Triggered when the user double-click the item.""" + pass + + def loadSchema(self): + """ + Get schema used to load the pose item. + + :rtype: list[dict] + """ + schema = [ + { + "name": "optionsGroup", + "title": "Options", + "type": "group", + "order": 2, + }, + { + "name": "key", + "type": "bool", + "inline": True, + "default": False, + "persistent": True, + }, + { + "name": "mirror", + "type": "bool", + "inline": True, + "default": False, + "persistent": True, + }, + { + "name": "additive", + "type": "bool", + "inline": True, + "default": False, + "persistent": True, + }, + { + "name": "searchAndReplaceEnabled", + "title": "Search and Replace", + "type": "bool", + "inline": True, + "default": False, + "persistent": True, + }, + { + "name": "searchAndReplace", + "title": "", + "type": "stringDouble", + "default": ("", ""), + "placeholder": ("search", "replace"), + "persistent": True, + "actions": [ + { + "name": "Switch", + "callback": self.switchSearchAndReplace, + }, + { + "name": "Clear", + "callback": self.clearSearchAndReplace, + }, + { + "name": "From Mirror Table", + "enabled": bool(findMirrorTable(self.path())), + "callback": self.mirrorTableSearchAndReplace, + }, + ] + }, + ] + + schema.extend(super(PoseItem, self).loadSchema()) + + return schema + + def mirrorTable(self): + return findMirrorTable(self.path()) + + def loadValidator(self, **values): + """ + Using the validator to change the state of the mirror option. + + :type values: dict + :rtype: list[dict] + """ + # Mirror check box + mirrorTip = "Cannot find a mirror table!" + mirrorTable = findMirrorTable(self.path()) + if mirrorTable: + mirrorTip = "Using mirror table: %s" % mirrorTable.path() + + fields = [ + { + "name": "mirror", + "toolTip": mirrorTip, + "enabled": mirrorTable is not None, + }, + { + "name": "searchAndReplace", + "visible": values.get("searchAndReplaceEnabled") + }, + ] + + fields.extend(super(PoseItem, self).loadValidator(**values)) + + return fields + + def save(self, objects, **kwargs): + """ + Save all the given object data to the item path on disc. + + :type objects: list[str] + :type kwargs: dict + """ + super(PoseItem, self).save(**kwargs) + + # Save the pose to the temp location + mutils.savePose( + self.transferPath(), + objects, + metadata={"description": kwargs.get("comment", "")} + ) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/setsitem.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/setsitem.py new file mode 100644 index 0000000..b84ba01 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/setsitem.py @@ -0,0 +1,65 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os + +try: + import mutils +except ImportError as error: + print(error) + +from studiolibrarymaya import baseitem + + +def save(path, *args, **kwargs): + """Convenience function for saving a SetsItem.""" + SetsItem(path).safeSave(*args, **kwargs) + + +def load(path, *args, **kwargs): + """Convenience function for loading a SetsItem.""" + SetsItem(path).load(*args, **kwargs) + + +class SetsItem(baseitem.BaseItem): + + NAME = "Selection Set" + EXTENSION = ".set" + ICON_PATH = os.path.join(os.path.dirname(__file__), "icons", "selectionSet.png") + TRANSFER_CLASS = mutils.SelectionSet + TRANSFER_BASENAME = "set.json" + + def loadFromCurrentValues(self): + """Load the selection set using the settings for this item.""" + self.load(namespaces=self.namespaces()) + + def load(self, namespaces=None): + """ + :type namespaces: list[str] | None + """ + self.selectContent(namespaces=namespaces) + + def save(self, objects, **kwargs): + """ + Save all the given object data to the item path on disc. + + :type objects: list[str] + :type kwargs: dict + """ + super(SetsItem, self).save(**kwargs) + + # Save the selection set to the given path + mutils.saveSelectionSet( + self.path() + "/set.json", + objects, + metadata={"description": kwargs.get("comment", "")} + ) diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/setsmenu.py b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/setsmenu.py new file mode 100644 index 0000000..79a5420 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiolibrarymaya/setsmenu.py @@ -0,0 +1,167 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import logging +from functools import partial + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtWidgets + +import studiolibrary + +from studiolibrarymaya import setsitem + + +logger = logging.getLogger(__name__) + + +DIRNAME = os.path.dirname(__file__) +ARROW_ICON_PATH = os.path.join(DIRNAME, "icons", "arrow.png") + + +def selectContentAction(item, parent=None): + """ + :param item: mayabaseitem.MayaBaseItem + :param parent: QtWidgets.QMenu + """ + arrowIcon = QtGui.QIcon(ARROW_ICON_PATH) + action = QtWidgets.QAction(arrowIcon, "Select content", parent) + action.triggered.connect(item.selectContent) + return action + + +def showSetsMenu(path, **kwargs): + """ + Show the frame range menu at the current cursor position. + + :type path: str + :rtype: QtWidgets.QAction + """ + menu = SetsMenu.fromPath(path, **kwargs) + position = QtGui.QCursor().pos() + action = menu.exec_(position) + return action + + +class SetsMenu(QtWidgets.QMenu): + + @classmethod + def fromPath(cls, path, parent=None, libraryWindow=None, **kwargs): + """ + Return a new SetMenu instance from the given path. + + :type path: str + :type parent: QtWidgets.QMenu or None + :type libraryWindow: studiolibrary.LibraryWindow or None + :type kwargs: dict + :rtype: QtWidgets.QAction + """ + item = setsitem.SetsItem(path, libraryWindow=libraryWindow) + return cls(item, parent, enableSelectContent=False, **kwargs) + + def __init__( + self, + item, + parent=None, + namespaces=None, + enableSelectContent=True, + ): + """ + :type item: studiolibrarymaya.BaseItem + :type parent: QtWidgets.QMenu or None + :type namespaces: list[str] or None + :type enableSelectContent: bool + """ + parent = parent or item.libraryWindow() + QtWidgets.QMenu.__init__(self, "Selection Sets", parent) + + icon = QtGui.QIcon(setsitem.SetsItem.ICON_PATH) + self.setIcon(icon) + + self._item = item + self._namespaces = namespaces + self._enableSelectContent = enableSelectContent + self.reload() + + def item(self): + """ + :rtype: mayabaseitem.MayaBaseItem + """ + return self._item + + def namespaces(self): + """ + :rtype: list[str] + """ + return self._namespaces + + def selectContent(self): + """ + :rtype: None + """ + self.item().selectContent(namespaces=self.namespaces()) + + def selectionSets(self): + """ + :rtype: list[setsitem.SetsItem] + """ + path = self.item().path() + + paths = studiolibrary.walkup( + path, + match=lambda path: path.endswith(".set"), + depth=10, + ) + + items = [] + paths = list(paths) + libraryWindow = self.item().libraryWindow() + + for path in paths: + item = setsitem.SetsItem(path) + item.setLibraryWindow(libraryWindow) + items.append(item) + + return items + + def reload(self): + """ + :rtype: None + """ + self.clear() + + if self._enableSelectContent: + action = selectContentAction(item=self.item(), parent=self) + self.addAction(action) + self.addSeparator() + + selectionSets = self.selectionSets() + + if selectionSets: + for selectionSet in selectionSets: + + dirname = os.path.basename(os.path.dirname(selectionSet.path())) + + basename = os.path.basename(selectionSet.path()) + basename = basename.replace(selectionSet.EXTENSION, "") + + nicename = dirname + ": " + basename + + action = QtWidgets.QAction(nicename, self) + callback = partial(selectionSet.load, namespaces=self.namespaces()) + action.triggered.connect(callback) + self.addAction(action) + else: + action = QtWidgets.QAction("No selection sets found!", self) + action.setEnabled(False) + self.addAction(action) diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/__init__.py b/2023/scripts/animation_tools/studiolibrary/studioqt/__init__.py new file mode 100644 index 0000000..9465a48 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/__init__.py @@ -0,0 +1,21 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studioqt.utils import * +from studioqt.icon import Icon +from studioqt.menu import Menu +from studioqt.color import Color +from studioqt.pixmap import Pixmap +from studioqt.stylesheet import StyleSheet +from studioqt.decorators import showWaitCursor +from studioqt.decorators import showArrowCursor +from studioqt.imagesequence import ImageSequence diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/color.py b/2023/scripts/animation_tools/studiolibrary/studioqt/color.py new file mode 100644 index 0000000..5a2a920 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/color.py @@ -0,0 +1,78 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtGui + + +COLORS = [ + {"name": "red", "color": "rgb(255, 115, 100)"}, + {"name": "orange", "color": "rgb(255, 150, 100)"}, + {"name": "yellow", "color": "rgb(255, 210, 103)"}, + {"name": "green", "color": "rgb(140, 220, 140)"}, + {"name": "blue", "color": "rgb(110, 175, 255)"}, + {"name": "purple", "color": "rgb(160, 120, 255)"}, + {"name": "pink", "color": "rgb(230, 130, 180)"}, + {"name": "grey", "color": "rgb(125, 125, 140)"}, +] + +COLORS_INDEXED = {c["name"]: c for c in COLORS} + + +class Color(QtGui.QColor): + + @classmethod + def fromColor(cls, color): + """ + :type color: QtGui.QColor + """ + color = ('rgba(%d, %d, %d, %d)' % color.getRgb()) + return cls.fromString(color) + + @classmethod + def fromString(cls, c): + """ + :type c: str + """ + a = 255 + + c = c.replace(";", "") + if not c.startswith("rgb"): + c = COLORS_INDEXED.get(c) + if c: + c = c.get("color") + else: + return cls(0, 0, 0, 255) + + try: + r, g, b, a = c.replace("rgb(", "").replace("rgba(", "").replace(")", "").split(",") + except ValueError: + r, g, b = c.replace("rgb(", "").replace(")", "").split(",") + + return cls(int(r), int(g), int(b), int(a)) + + def __eq__(self, other): + if isinstance(other, Color): + return self.toString() == other.toString() + else: + return QtGui.QColor.__eq__(self, other) + + def toString(self): + """ + :type: str + """ + return 'rgba(%d, %d, %d, %d)' % self.getRgb() + + def isDark(self): + """ + :type: bool + """ + return self.red() < 125 and self.green() < 125 and self.blue() < 125 diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/decorators.py b/2023/scripts/animation_tools/studiolibrary/studioqt/decorators.py new file mode 100644 index 0000000..ed9c4eb --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/decorators.py @@ -0,0 +1,47 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtWidgets + + +def showWaitCursor(fn): + + def wrapped(*args, **kwargs): + cursor = QtGui.QCursor(QtCore.Qt.WaitCursor) + QtWidgets.QApplication.setOverrideCursor(cursor) + try: + return fn(*args, **kwargs) + finally: + QtWidgets.QApplication.restoreOverrideCursor() + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped + + +def showArrowCursor(fn): + + def wrapped(*args, **kwargs): + cursor = QtGui.QCursor(QtCore.Qt.ArrowCursor) + QtWidgets.QApplication.setOverrideCursor(cursor) + try: + return fn(*args, **kwargs) + finally: + QtWidgets.QApplication.restoreOverrideCursor() + + wrapped.__name__ = fn.__name__ + wrapped.__doc__ = fn.__doc__ + + return wrapped diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/icon.py b/2023/scripts/animation_tools/studiolibrary/studioqt/icon.py new file mode 100644 index 0000000..a6b59dc --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/icon.py @@ -0,0 +1,185 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import copy + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore + +import studioqt + + +class Icon(QtGui.QIcon): + + @classmethod + def fa(cls, path, **kwargs): + """ + Create a new icon with the given path, options and state. + + Example: + icon = studioqt.Icon.fa( + path, + color="rgb(255,255,255)" + color_disabled="rgba(0,200,200,20)", + ) + + :type path: str + :type kwargs: dict + + :rtype: studioqt.Icon + """ + color = kwargs.get('color', QtGui.QColor(0, 0, 0)) + + pixmap = studioqt.Pixmap(path) + pixmap.setColor(color) + + valid_options = [ + 'active', + 'selected', + 'disabled', + 'on', + 'off', + 'on_active', + 'on_selected', + 'on_disabled', + 'off_active', + 'off_selected', + 'off_disabled', + 'color', + 'color_on', + 'color_off', + 'color_active', + 'color_selected', + 'color_disabled', + 'color_on_selected', + 'color_on_active', + 'color_on_disabled', + 'color_off_selected', + 'color_off_active', + 'color_off_disabled', + ] + + default = { + "on_active": kwargs.get("active", studioqt.Pixmap(path)), + "off_active": kwargs.get("active", studioqt.Pixmap(path)), + "on_disabled": kwargs.get("disabled", studioqt.Pixmap(path)), + "off_disabled": kwargs.get("disabled", studioqt.Pixmap(path)), + "on_selected": kwargs.get("selected", studioqt.Pixmap(path)), + "off_selected": kwargs.get("selected", studioqt.Pixmap(path)), + "color_on_active": kwargs.get("color_active", color), + "color_off_active": kwargs.get("color_active", color), + "color_on_disabled": kwargs.get("color_disabled", color), + "color_off_disabled": kwargs.get("color_disabled", color), + "color_on_selected": kwargs.get("color_selected", color), + "color_off_selected": kwargs.get("color_selected", color), + } + + default.update(kwargs) + kwargs = copy.copy(default) + + for option in valid_options: + if 'color' in option: + kwargs[option] = kwargs.get(option, color) + else: + svg_path = kwargs.get(option, path) + kwargs[option] = studioqt.Pixmap(svg_path) + + options = { + QtGui.QIcon.On: { + QtGui.QIcon.Normal: (kwargs['color_on'], kwargs['on']), + QtGui.QIcon.Active: (kwargs['color_on_active'], kwargs['on_active']), + QtGui.QIcon.Disabled: (kwargs['color_on_disabled'], kwargs['on_disabled']), + QtGui.QIcon.Selected: (kwargs['color_on_selected'], kwargs['on_selected']) + }, + + QtGui.QIcon.Off: { + QtGui.QIcon.Normal: (kwargs['color_off'], kwargs['off']), + QtGui.QIcon.Active: (kwargs['color_off_active'], kwargs['off_active']), + QtGui.QIcon.Disabled: (kwargs['color_off_disabled'], kwargs['off_disabled']), + QtGui.QIcon.Selected: (kwargs['color_off_selected'], kwargs['off_selected']) + } + } + + icon = cls(pixmap) + + for state in options: + for mode in options[state]: + color, pixmap = options[state][mode] + + pixmap = studioqt.Pixmap(pixmap) + pixmap.setColor(color) + + icon.addPixmap(pixmap, mode, state) + + return icon + + def setColor(self, color, size=None): + """ + :type color: QtGui.QColor + :rtype: None + """ + icon = self + size = size or icon.actualSize(QtCore.QSize(256, 256)) + pixmap = icon.pixmap(size) + + if not self.isNull(): + painter = QtGui.QPainter(pixmap) + painter.setCompositionMode(QtGui.QPainter.CompositionMode_SourceIn) + painter.setBrush(color) + painter.setPen(color) + painter.drawRect(pixmap.rect()) + painter.end() + + icon = QtGui.QIcon(pixmap) + self.swap(icon) + + if self._badgeEnabled: + self.updateBadge() + + def __init__(self, *args, **kwargs): + super(Icon, self).__init__(*args, **kwargs) + + self._badgeColor = None + self._badgeEnabled = False + + def badgeColor(self): + return self._badgeColor + + def setBadgeColor(self, color): + self._badgeColor = color + + def badgeEnabled(self): + return self._badgeEnabled + + def setBadgeEnabled(self, enabled): + self._badgeEnabled = enabled + + def updateBadge(self): + """ + """ + color = self.badgeColor() or QtGui.QColor(240, 240, 100) + size = self.actualSize(QtCore.QSize(256, 256)) + + pixmap = self.pixmap(size) + painter = QtGui.QPainter(pixmap) + + pen = QtGui.QPen(color) + pen.setWidth(0) + painter.setPen(pen) + + painter.setBrush(color) + painter.setRenderHint(QtGui.QPainter.Antialiasing) + painter.drawEllipse(0, 0, size.height()/3.0, size.width()/3.0) + painter.end() + + icon = QtGui.QIcon(pixmap) + self.swap(icon) diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/imagesequence.py b/2023/scripts/animation_tools/studiolibrary/studioqt/imagesequence.py new file mode 100644 index 0000000..67eaa03 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/imagesequence.py @@ -0,0 +1,230 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import re +import os + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore + + +__all__ = ['ImageSequence', 'ImageSequenceWidget'] + + +class ImageSequence(QtCore.QObject): + + DEFAULT_FPS = 24 + + frameChanged = QtCore.Signal(int) + + def __init__(self, path, *args): + QtCore.QObject.__init__(self, *args) + + self._timer = None + self._frame = 0 + self._frames = [] + self._dirname = None + self._paused = False + + if path: + self.setPath(path) + + def firstFrame(self): + """ + Get the path to the first frame. + + :rtype: str + """ + if self._frames: + return self._frames[0] + return "" + + def setPath(self, path): + """ + Set a single frame or a directory to an image sequence. + + :type path: str + """ + if os.path.isfile(path): + self._frame = 0 + self._frames = [path] + elif os.path.isdir(path): + self.setDirname(path) + + def setDirname(self, dirname): + """ + Set the location to the image sequence. + + :type dirname: str + :rtype: None + """ + def naturalSortItems(items): + """ + Sort the given list in the way that humans expect. + """ + convert = lambda text: int(text) if text.isdigit() else text + alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)] + items.sort(key=alphanum_key) + + self._dirname = dirname + if os.path.isdir(dirname): + self._frames = [dirname + "/" + filename for filename in os.listdir(dirname)] + naturalSortItems(self._frames) + + def dirname(self): + """ + Return the location to the image sequence. + + :rtype: str + """ + return self._dirname + + def reset(self): + """ + Stop and reset the current frame to 0. + + :rtype: None + """ + if not self._timer: + self._timer = QtCore.QTimer(self.parent()) + self._timer.setSingleShot(False) + self._timer.timeout.connect(self._frameChanged) + + if not self._paused: + self._frame = 0 + self._timer.stop() + + def pause(self): + """ + ImageSequence will enter Paused state. + + :rtype: None + """ + self._paused = True + self._timer.stop() + + def resume(self): + """ + ImageSequence will enter Playing state. + + :rtype: None + """ + if self._paused: + self._paused = False + self._timer.start() + + def stop(self): + """ + Stops the movie. ImageSequence enters NotRunning state. + + :rtype: None + """ + self._timer.stop() + + def start(self): + """ + Starts the movie. ImageSequence will enter Running state + + :rtype: None + """ + self.reset() + if self._timer: + import studiolibrary + fps = studiolibrary.config.get("playbackFrameRate", self.DEFAULT_FPS) + self._timer.start(1000.0 / fps) + + def frames(self): + """ + Return all the filenames in the image sequence. + + :rtype: list[str] + """ + return self._frames + + def _frameChanged(self): + """ + Triggered when the current frame changes. + + :rtype: None + """ + if not self._frames: + return + + frame = self._frame + frame += 1 + self.jumpToFrame(frame) + + def percent(self): + """ + Return the current frame position as a percentage. + + :rtype: None + """ + if len(self._frames) == self._frame + 1: + _percent = 1 + else: + _percent = float((len(self._frames) + self._frame)) / len(self._frames) - 1 + return _percent + + def frameCount(self): + """ + Return the number of frames. + + :rtype: int + """ + return len(self._frames) + + def currentIcon(self): + """ + Returns the current frame as a QIcon. + + :rtype: QtGui.QIcon + """ + return QtGui.QIcon(self.currentFilename()) + + def currentPixmap(self): + """ + Return the current frame as a QPixmap. + + :rtype: QtGui.QPixmap + """ + return QtGui.QPixmap(self.currentFilename()) + + def currentFilename(self): + """ + Return the current file name. + + :rtype: str or None + """ + try: + return self._frames[self.currentFrameNumber()] + except IndexError: + pass + + def currentFrameNumber(self): + """ + Return the current frame. + + :rtype: int or None + """ + return self._frame + + def jumpToFrame(self, frame): + """ + Set the current frame. + + :rtype: int or None + """ + if frame >= self.frameCount(): + frame = 0 + self._frame = frame + self.frameChanged.emit(frame) diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/menu.py b/2023/scripts/animation_tools/studiolibrary/studioqt/menu.py new file mode 100644 index 0000000..e7e3e0c --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/menu.py @@ -0,0 +1,81 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor import six +from studiovendor.Qt import QtWidgets + + +class Menu(QtWidgets.QMenu): + + def __init__(self, *args): + QtWidgets.QMenu.__init__(self, *args) + + def findAction(self, text): + """ + Return the action that contains the given text. + + :type text: str + + :rtype: QtWidgets.QAction + """ + for child in self.children(): + + action = None + + if isinstance(child, QtWidgets.QMenu): + action = child.menuAction() + elif isinstance(child, QtWidgets.QAction): + action = child + + if action and action.text().lower() == text.lower(): + return action + + def insertAction(self, before, *args): + """ + Add support for finding the before action by the given string. + + :type before: str or QtWidget.QAction + :type args: list + + :rtype: QtWidgets.QAction + """ + if isinstance(before, six.string_types): + before = self.findAction(before) + + return QtWidgets.QMenu.insertAction(self, before, *args) + + def insertMenu(self, before, menu): + """ + Add support for finding the before action by the given string. + + :type before: str or QtWidget.QAction + :type menu: QtWidgets.QMenu + + :rtype: QtWidgets.QAction + """ + if isinstance(before, six.string_types): + before = self.findAction(before) + + QtWidgets.QMenu.insertMenu(self, before, menu) + + def insertSeparator(self, before): + """ + Add support for finding the before action by the given string. + + :type before: str or QtWidget.QAction + + :rtype: QtWidgets.QAction + """ + if isinstance(before, six.string_types): + before = self.findAction(before) + + return QtWidgets.QMenu.insertSeparator(self, before) diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/pixmap.py b/2023/scripts/animation_tools/studiolibrary/studioqt/pixmap.py new file mode 100644 index 0000000..c897939 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/pixmap.py @@ -0,0 +1,40 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +from studiovendor import six +from studiovendor.Qt import QtGui + +import studioqt + + +class Pixmap(QtGui.QPixmap): + + def __init__(self, *args): + QtGui.QPixmap.__init__(self, *args) + + self._color = None + + def setColor(self, color): + """ + :type color: QtGui.QColor + :rtype: None + """ + if isinstance(color, six.string_types): + color = studioqt.Color.fromString(color) + + if not self.isNull(): + painter = QtGui.QPainter(self) + painter.setCompositionMode(QtGui.QPainter.CompositionMode_SourceIn) + painter.setBrush(color) + painter.setPen(color) + painter.drawRect(self.rect()) + painter.end() diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/stylesheet.py b/2023/scripts/animation_tools/studiolibrary/studioqt/stylesheet.py new file mode 100644 index 0000000..b0a2eb4 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/stylesheet.py @@ -0,0 +1,102 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import re + +import studioqt + + +class StyleSheet(object): + + @classmethod + def fromPath(cls, path, **kwargs): + """ + :type path: str + :rtype: str + """ + styleSheet = cls() + data = styleSheet.read(path) + data = StyleSheet.format(data, **kwargs) + styleSheet.setData(data) + return styleSheet + + @classmethod + def fromText(cls, text, options=None): + """ + :type text: str + :rtype: str + """ + styleSheet = cls() + data = StyleSheet.format(text, options=options) + styleSheet.setData(data) + return styleSheet + + def __init__(self): + self._data = "" + + def setData(self, data): + """ + :type data: str + """ + self._data = data + + def data(self): + """ + :rtype: str + """ + return self._data + + @staticmethod + def read(path): + """ + :type path: str + :rtype: str + """ + data = "" + + if os.path.isfile(path): + with open(path, "r") as f: + data = f.read() + + return data + + @staticmethod + def format(data=None, options=None, dpi=1): + """ + :type data: + :type options: dict + :rtype: str + """ + if options is not None: + keys = list(options.keys()) + keys.sort(key=len, reverse=True) + for key in keys: + data = data.replace(key, options[key]) + + reDpi = re.compile("[0-9]+px") + newData = [] + + for line in data.split("\n"): + dpi_ = reDpi.search(line) + + if dpi_: + new = dpi_.group().replace("px", "") + val = int(new) + if val > 0: + val = int(val * dpi) + line = line.replace(dpi_.group(), str(val) + "px") + + newData.append(line) + + data = "\n".join(newData) + return data diff --git a/2023/scripts/animation_tools/studiolibrary/studioqt/utils.py b/2023/scripts/animation_tools/studiolibrary/studioqt/utils.py new file mode 100644 index 0000000..57169d6 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studioqt/utils.py @@ -0,0 +1,230 @@ +# Copyright 2020 by Kurt Rathjen. All Rights Reserved. +# +# This library is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. This library is distributed in the +# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see . + +import os +import sys +import inspect +import logging +import contextlib + +from studiovendor.Qt import QtGui +from studiovendor.Qt import QtCore +from studiovendor.Qt import QtCompat +from studiovendor.Qt import QtWidgets + +import studioqt + + +__all__ = [ + "app", + "fadeIn", + "fadeOut", + "loadUi", + "installFonts", + "isAltModifier", + "isShiftModifier", + "isControlModifier", +] + +logger = logging.getLogger(__name__) + + +@contextlib.contextmanager +def app(): + """ + + .. code-block:: python + import studioqt + + with studioqt.app(): + widget = QWidget(None) + widget.show() + + :rtype: None + """ + app_ = None + + isAppRunning = bool(QtWidgets.QApplication.instance()) + if not isAppRunning: + app_ = QtWidgets.QApplication(sys.argv) + + yield None + + if not isAppRunning: + sys.exit(app_.exec_()) + + +def uiPath(cls): + """ + Return the ui path for the given widget class. + + :type cls: type + :rtype: str + """ + name = cls.__name__ + path = inspect.getfile(cls) + dirname = os.path.dirname(path) + + path = dirname + "/resource/ui/" + name + ".ui" + + if not os.path.exists(path): + path = dirname + "/ui/" + name + ".ui" + + if not os.path.exists(path): + path = dirname + "/" + name + ".ui" + + return path + + +def loadUi(widget, path=None, cls=None): + """ + .. code-block:: python + import studioqt + + class Widget(QtWidgets.QWidget): + def __init__(self) + super(Widget, self).__init__() + studioqt.loadUi(self) + + with studioqt.app(): + widget = Widget() + widget.show() + + :type widget: QWidget or QDialog + :type path: str + :type cls: object + :rtype: None + """ + if cls: + path = uiPath(cls) + elif not path: + path = uiPath(widget.__class__) + + cwd = os.getcwd() + try: + os.chdir(os.path.dirname(path)) + widget.ui = QtCompat.loadUi(path, widget) + finally: + os.chdir(cwd) + + +def isModifier(): + """ + Return True if either the alt key or control key is down. + + :rtype: bool + """ + return isAltModifier() or isControlModifier() + + +def isAltModifier(): + """ + Return True if the alt key is down. + + :rtype: bool + """ + modifiers = QtWidgets.QApplication.keyboardModifiers() + return modifiers == QtCore.Qt.AltModifier + + +def isControlModifier(): + """ + Return True if the control key is down. + + :rtype: bool + """ + modifiers = QtWidgets.QApplication.keyboardModifiers() + return modifiers == QtCore.Qt.ControlModifier + + +def isShiftModifier(): + """ + Return True if the shift key is down. + + :rtype: bool + """ + modifiers = QtWidgets.QApplication.keyboardModifiers() + return modifiers == QtCore.Qt.ShiftModifier + + +def fadeIn(widget, duration=200, onFinished=None): + """ + Fade in the given widget using the opacity effect. + + :type widget: QtWidget.QWidgets + :type duration: int + :type onFinished: func + :rtype: QtCore.QPropertyAnimation + """ + widget._fadeInEffect_ = QtWidgets.QGraphicsOpacityEffect() + widget.setGraphicsEffect(widget._fadeInEffect_) + animation = QtCore.QPropertyAnimation(widget._fadeInEffect_, b"opacity") + animation.setDuration(duration) + animation.setStartValue(0.0) + animation.setEndValue(1.0) + animation.setEasingCurve(QtCore.QEasingCurve.InOutCubic) + animation.start() + + if onFinished: + animation.finished.connect(onFinished) + + widget._fadeIn_ = animation + + return animation + + +def fadeOut(widget, duration=200, onFinished=None): + """ + Fade out the given widget using the opacity effect. + + :type widget: QtWidget.QWidgets + :type duration: int + :type onFinished: func + :rtype: QtCore.QPropertyAnimation + """ + widget._fadeOutEffect_ = QtWidgets.QGraphicsOpacityEffect() + widget.setGraphicsEffect(widget._fadeOutEffect_) + animation = QtCore.QPropertyAnimation(widget._fadeOutEffect_, b"opacity") + animation.setDuration(duration) + animation.setStartValue(1.0) + animation.setEndValue(0.0) + animation.setEasingCurve(QtCore.QEasingCurve.InOutCubic) + animation.start() + + if onFinished: + animation.finished.connect(onFinished) + + widget._fadeOut_ = animation + + return animation + + +def installFonts(path): + """ + Install all the fonts in the given directory path. + + :type path: str + """ + path = os.path.abspath(path) + fontDatabase = QtGui.QFontDatabase() + + for filename in os.listdir(path): + + if filename.endswith(".ttf"): + + filename = os.path.join(path, filename) + result = fontDatabase.addApplicationFont(filename) + + if result > 0: + logger.debug("Added font %s", filename) + else: + logger.debug("Cannot add font %s", filename) diff --git a/2023/scripts/animation_tools/studiolibrary/studiovendor/Qt.py b/2023/scripts/animation_tools/studiolibrary/studiovendor/Qt.py new file mode 100644 index 0000000..d6ba71a --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiovendor/Qt.py @@ -0,0 +1,1956 @@ +"""Minimal Python 2 & 3 shim around all Qt bindings + +DOCUMENTATION + Qt.py was born in the film and visual effects industry to address + the growing need for the development of software capable of running + with more than one flavour of the Qt bindings for Python. + + Supported Binding: PySide, PySide2, PySide6, PyQt4, PyQt5 + + 1. Build for one, run with all + 2. Explicit is better than implicit + 3. Support co-existence + + Default resolution order: + - PySide6 + - PySide2 + - PyQt5 + - PySide + - PyQt4 + + Usage: + >> import sys + >> from Qt import QtWidgets + >> app = QtWidgets.QApplication(sys.argv) + >> button = QtWidgets.QPushButton("Hello World") + >> button.show() + >> app.exec_() + + All members of PySide2 are mapped from other bindings, should they exist. + If no equivalent member exist, it is excluded from Qt.py and inaccessible. + The idea is to highlight members that exist across all supported binding, + and guarantee that code that runs on one binding runs on all others. + + For more details, visit https://github.com/mottosso/Qt.py + +LICENSE + + See end of file for license (MIT, BSD) information. + +""" + +import os +import sys +import types +import shutil +import importlib +import json + + +__version__ = "1.3.10" + +# Enable support for `from Qt import *` +__all__ = [] + +# Flags from environment variables +QT_VERBOSE = bool(os.getenv("QT_VERBOSE")) +QT_PREFERRED_BINDING_JSON = os.getenv("QT_PREFERRED_BINDING_JSON", "") +QT_PREFERRED_BINDING = os.getenv("QT_PREFERRED_BINDING", "") +QT_SIP_API_HINT = os.getenv("QT_SIP_API_HINT") + +# Reference to Qt.py +Qt = sys.modules[__name__] +Qt.QtCompat = types.ModuleType("QtCompat") + +try: + long +except NameError: + # Python 3 compatibility + long = int + + +"""Common members of all bindings + +This is where each member of Qt.py is explicitly defined. +It is based on a "lowest common denominator" of all bindings; +including members found in each of the 4 bindings. + +The "_common_members" dictionary is generated using the +build_membership.sh script. + +""" + +_common_members = { + "QtCore": [ + "QAbstractAnimation", + "QAbstractEventDispatcher", + "QAbstractItemModel", + "QAbstractListModel", + "QAbstractTableModel", + "QAnimationGroup", + "QBasicTimer", + "QBitArray", + "QBuffer", + "QByteArray", + "QByteArrayMatcher", + "QChildEvent", + "QCoreApplication", + "QCryptographicHash", + "QDataStream", + "QDate", + "QDateTime", + "QDir", + "QDirIterator", + "QDynamicPropertyChangeEvent", + "QEasingCurve", + "QElapsedTimer", + "QEvent", + "QEventLoop", + "QFile", + "QFileInfo", + "QFileSystemWatcher", + "QGenericArgument", + "QGenericReturnArgument", + "QIODevice", + "QLibraryInfo", + "QLine", + "QLineF", + "QLocale", + "QMargins", + "QMetaClassInfo", + "QMetaEnum", + "QMetaMethod", + "QMetaObject", + "QMetaProperty", + "QMimeData", + "QModelIndex", + "QMutex", + "QMutexLocker", + "QObject", + "QParallelAnimationGroup", + "QPauseAnimation", + "QPersistentModelIndex", + "QPluginLoader", + "QPoint", + "QPointF", + "QProcess", + "QProcessEnvironment", + "QPropertyAnimation", + "QReadLocker", + "QReadWriteLock", + "QRect", + "QRectF", + "QResource", + "QRunnable", + "QSemaphore", + "QSequentialAnimationGroup", + "QSettings", + "QSignalMapper", + "QSize", + "QSizeF", + "QSocketNotifier", + "QStringListModel", + "QSysInfo", + "QSystemSemaphore", + "QT_TRANSLATE_NOOP", + "QT_TR_NOOP", + "QT_TR_NOOP_UTF8", + "QTemporaryFile", + "QTextBoundaryFinder", + "QTextStream", + "QTextStreamManipulator", + "QThread", + "QThreadPool", + "QTime", + "QTimeLine", + "QTimer", + "QTimerEvent", + "QTranslator", + "QUrl", + "QUuid", + "QVariantAnimation", + "QWaitCondition", + "QWriteLocker", + "QXmlStreamAttribute", + "QXmlStreamAttributes", + "QXmlStreamEntityDeclaration", + "QXmlStreamEntityResolver", + "QXmlStreamNamespaceDeclaration", + "QXmlStreamNotationDeclaration", + "QXmlStreamReader", + "QXmlStreamWriter", + "Qt", + "QtMsgType", + "qAbs", + "qAddPostRoutine", + "qCritical", + "qDebug", + "qFatal", + "qFuzzyCompare", + "qIsFinite", + "qIsInf", + "qIsNaN", + "qIsNull", + "qRegisterResourceData", + "qUnregisterResourceData", + "qVersion", + "qWarning", + "Signal", + "Slot" + ], + "QtGui": [ + "QAbstractTextDocumentLayout", + "QActionEvent", + "QBitmap", + "QBrush", + "QClipboard", + "QCloseEvent", + "QColor", + "QConicalGradient", + "QContextMenuEvent", + "QCursor", + "QDesktopServices", + "QDoubleValidator", + "QDrag", + "QDragEnterEvent", + "QDragLeaveEvent", + "QDragMoveEvent", + "QDropEvent", + "QFileOpenEvent", + "QFocusEvent", + "QFont", + "QFontDatabase", + "QFontInfo", + "QFontMetrics", + "QFontMetricsF", + "QGradient", + "QHelpEvent", + "QHideEvent", + "QHoverEvent", + "QIcon", + "QIconDragEvent", + "QIconEngine", + "QImage", + "QImageIOHandler", + "QImageReader", + "QImageWriter", + "QInputEvent", + "QInputMethodEvent", + "QIntValidator", + "QKeyEvent", + "QKeySequence", + "QLinearGradient", + "QMatrix2x2", + "QMatrix2x3", + "QMatrix2x4", + "QMatrix3x2", + "QMatrix3x3", + "QMatrix3x4", + "QMatrix4x2", + "QMatrix4x3", + "QMatrix4x4", + "QMouseEvent", + "QMoveEvent", + "QMovie", + "QPaintDevice", + "QPaintEngine", + "QPaintEngineState", + "QPaintEvent", + "QPainter", + "QPainterPath", + "QPainterPathStroker", + "QPalette", + "QPen", + "QPicture", + "QPixmap", + "QPixmapCache", + "QPolygon", + "QPolygonF", + "QQuaternion", + "QRadialGradient", + "QRegion", + "QResizeEvent", + "QSessionManager", + "QShortcutEvent", + "QShowEvent", + "QStandardItem", + "QStandardItemModel", + "QStatusTipEvent", + "QSyntaxHighlighter", + "QTabletEvent", + "QTextBlock", + "QTextBlockFormat", + "QTextBlockGroup", + "QTextBlockUserData", + "QTextCharFormat", + "QTextCursor", + "QTextDocument", + "QTextDocumentFragment", + "QTextFormat", + "QTextFragment", + "QTextFrame", + "QTextFrameFormat", + "QTextImageFormat", + "QTextInlineObject", + "QTextItem", + "QTextLayout", + "QTextLength", + "QTextLine", + "QTextList", + "QTextListFormat", + "QTextObject", + "QTextObjectInterface", + "QTextOption", + "QTextTable", + "QTextTableCell", + "QTextTableCellFormat", + "QTextTableFormat", + "QTouchEvent", + "QTransform", + "QValidator", + "QVector2D", + "QVector3D", + "QVector4D", + "QWhatsThisClickedEvent", + "QWheelEvent", + "QWindowStateChangeEvent", + "qAlpha", + "qBlue", + "qGray", + "qGreen", + "qIsGray", + "qRed", + "qRgb", + "qRgba" + ], + "QtHelp": [ + "QHelpContentItem", + "QHelpContentModel", + "QHelpContentWidget", + "QHelpEngine", + "QHelpEngineCore", + "QHelpIndexModel", + "QHelpIndexWidget", + "QHelpSearchEngine", + "QHelpSearchQuery", + "QHelpSearchQueryWidget", + "QHelpSearchResultWidget" + ], + "QtNetwork": [ + "QAbstractNetworkCache", + "QAbstractSocket", + "QAuthenticator", + "QHostAddress", + "QHostInfo", + "QLocalServer", + "QLocalSocket", + "QNetworkAccessManager", + "QNetworkAddressEntry", + "QNetworkCacheMetaData", + "QNetworkCookie", + "QNetworkCookieJar", + "QNetworkDiskCache", + "QNetworkInterface", + "QNetworkProxy", + "QNetworkProxyFactory", + "QNetworkProxyQuery", + "QNetworkReply", + "QNetworkRequest", + "QSsl", + "QSslCertificate", + "QSslCipher", + "QSslConfiguration", + "QSslError", + "QSslKey", + "QSslSocket", + "QTcpServer", + "QTcpSocket", + "QUdpSocket" + ], + "QtPrintSupport": [ + "QAbstractPrintDialog", + "QPageSetupDialog", + "QPrintDialog", + "QPrintEngine", + "QPrintPreviewDialog", + "QPrintPreviewWidget", + "QPrinter", + "QPrinterInfo" + ], + "QtSvg": [ + "QSvgGenerator", + "QSvgRenderer" + ], + "QtTest": [ + "QTest" + ], + "QtWidgets": [ + "QAbstractButton", + "QAbstractGraphicsShapeItem", + "QAbstractItemDelegate", + "QAbstractItemView", + "QAbstractScrollArea", + "QAbstractSlider", + "QAbstractSpinBox", + "QAction", + "QActionGroup", + "QApplication", + "QBoxLayout", + "QButtonGroup", + "QCalendarWidget", + "QCheckBox", + "QColorDialog", + "QColumnView", + "QComboBox", + "QCommandLinkButton", + "QCommonStyle", + "QCompleter", + "QDataWidgetMapper", + "QDateEdit", + "QDateTimeEdit", + "QDial", + "QDialog", + "QDialogButtonBox", + "QDockWidget", + "QDoubleSpinBox", + "QErrorMessage", + "QFileDialog", + "QFileIconProvider", + "QFileSystemModel", + "QFocusFrame", + "QFontComboBox", + "QFontDialog", + "QFormLayout", + "QFrame", + "QGesture", + "QGestureEvent", + "QGestureRecognizer", + "QGraphicsAnchor", + "QGraphicsAnchorLayout", + "QGraphicsBlurEffect", + "QGraphicsColorizeEffect", + "QGraphicsDropShadowEffect", + "QGraphicsEffect", + "QGraphicsEllipseItem", + "QGraphicsGridLayout", + "QGraphicsItem", + "QGraphicsItemGroup", + "QGraphicsLayout", + "QGraphicsLayoutItem", + "QGraphicsLineItem", + "QGraphicsLinearLayout", + "QGraphicsObject", + "QGraphicsOpacityEffect", + "QGraphicsPathItem", + "QGraphicsPixmapItem", + "QGraphicsPolygonItem", + "QGraphicsProxyWidget", + "QGraphicsRectItem", + "QGraphicsRotation", + "QGraphicsScale", + "QGraphicsScene", + "QGraphicsSceneContextMenuEvent", + "QGraphicsSceneDragDropEvent", + "QGraphicsSceneEvent", + "QGraphicsSceneHelpEvent", + "QGraphicsSceneHoverEvent", + "QGraphicsSceneMouseEvent", + "QGraphicsSceneMoveEvent", + "QGraphicsSceneResizeEvent", + "QGraphicsSceneWheelEvent", + "QGraphicsSimpleTextItem", + "QGraphicsTextItem", + "QGraphicsTransform", + "QGraphicsView", + "QGraphicsWidget", + "QGridLayout", + "QGroupBox", + "QHBoxLayout", + "QHeaderView", + "QInputDialog", + "QItemDelegate", + "QItemEditorCreatorBase", + "QItemEditorFactory", + "QLCDNumber", + "QLabel", + "QLayout", + "QLayoutItem", + "QLineEdit", + "QListView", + "QListWidget", + "QListWidgetItem", + "QMainWindow", + "QMdiArea", + "QMdiSubWindow", + "QMenu", + "QMenuBar", + "QMessageBox", + "QPanGesture", + "QPinchGesture", + "QPlainTextDocumentLayout", + "QPlainTextEdit", + "QProgressBar", + "QProgressDialog", + "QPushButton", + "QRadioButton", + "QRubberBand", + "QScrollArea", + "QScrollBar", + "QSizeGrip", + "QSizePolicy", + "QSlider", + "QSpacerItem", + "QSpinBox", + "QSplashScreen", + "QSplitter", + "QSplitterHandle", + "QStackedLayout", + "QStackedWidget", + "QStatusBar", + "QStyle", + "QStyleFactory", + "QStyleHintReturn", + "QStyleHintReturnMask", + "QStyleHintReturnVariant", + "QStyleOption", + "QStyleOptionButton", + "QStyleOptionComboBox", + "QStyleOptionComplex", + "QStyleOptionDockWidget", + "QStyleOptionFocusRect", + "QStyleOptionFrame", + "QStyleOptionGraphicsItem", + "QStyleOptionGroupBox", + "QStyleOptionHeader", + "QStyleOptionMenuItem", + "QStyleOptionProgressBar", + "QStyleOptionRubberBand", + "QStyleOptionSizeGrip", + "QStyleOptionSlider", + "QStyleOptionSpinBox", + "QStyleOptionTab", + "QStyleOptionTabBarBase", + "QStyleOptionTabWidgetFrame", + "QStyleOptionTitleBar", + "QStyleOptionToolBar", + "QStyleOptionToolBox", + "QStyleOptionToolButton", + "QStyleOptionViewItem", + "QStylePainter", + "QStyledItemDelegate", + "QSwipeGesture", + "QSystemTrayIcon", + "QTabBar", + "QTabWidget", + "QTableView", + "QTableWidget", + "QTableWidgetItem", + "QTableWidgetSelectionRange", + "QTapAndHoldGesture", + "QTapGesture", + "QTextBrowser", + "QTextEdit", + "QTimeEdit", + "QToolBar", + "QToolBox", + "QToolButton", + "QToolTip", + "QTreeView", + "QTreeWidget", + "QTreeWidgetItem", + "QTreeWidgetItemIterator", + "QUndoView", + "QVBoxLayout", + "QWhatsThis", + "QWidget", + "QWidgetAction", + "QWidgetItem", + "QWizard", + "QWizardPage" + ], + "QtXml": [ + "QDomAttr", + "QDomCDATASection", + "QDomCharacterData", + "QDomComment", + "QDomDocument", + "QDomDocumentFragment", + "QDomDocumentType", + "QDomElement", + "QDomEntity", + "QDomEntityReference", + "QDomImplementation", + "QDomNamedNodeMap", + "QDomNode", + "QDomNodeList", + "QDomNotation", + "QDomProcessingInstruction", + "QDomText" + ] +} + +""" Missing members + +This mapping describes members that have been deprecated +in one or more bindings and have been left out of the +_common_members mapping. + +The member can provide an extra details string to be +included in exceptions and warnings. +""" + +_missing_members = { + "QtGui": { + "QMatrix": "Deprecated in PyQt5", + }, +} + + +def _qInstallMessageHandler(handler): + """Install a message handler that works in all bindings + + Args: + handler: A function that takes 3 arguments, or None + """ + def messageOutputHandler(*args): + # In Qt4 bindings, message handlers are passed 2 arguments + # In Qt5 bindings, message handlers are passed 3 arguments + # The first argument is a QtMsgType + # The last argument is the message to be printed + # The Middle argument (if passed) is a QMessageLogContext + if len(args) == 3: + msgType, logContext, msg = args + elif len(args) == 2: + msgType, msg = args + logContext = None + else: + raise TypeError( + "handler expected 2 or 3 arguments, got {0}".format(len(args))) + + if isinstance(msg, bytes): + # In python 3, some bindings pass a bytestring, which cannot be + # used elsewhere. Decoding a python 2 or 3 bytestring object will + # consistently return a unicode object. + msg = msg.decode() + + handler(msgType, logContext, msg) + + passObject = messageOutputHandler if handler else handler + if Qt.IsPySide or Qt.IsPyQt4: + return Qt._QtCore.qInstallMsgHandler(passObject) + elif Qt.IsPySide2 or Qt.IsPyQt5 or Qt.IsPySide6: + return Qt._QtCore.qInstallMessageHandler(passObject) + + +def _getcpppointer(object): + if hasattr(Qt, "_shiboken6"): + return getattr(Qt, "_shiboken6").getCppPointer(object)[0] + elif hasattr(Qt, "_shiboken2"): + return getattr(Qt, "_shiboken2").getCppPointer(object)[0] + elif hasattr(Qt, "_shiboken"): + return getattr(Qt, "_shiboken").getCppPointer(object)[0] + elif hasattr(Qt, "_sip"): + return getattr(Qt, "_sip").unwrapinstance(object) + raise AttributeError("'module' has no attribute 'getCppPointer'") + + +def _wrapinstance(ptr, base=None): + """Enable implicit cast of pointer to most suitable class + + This behaviour is available in sip per default. + + Based on http://nathanhorne.com/pyqtpyside-wrap-instance + + Usage: + This mechanism kicks in under these circumstances. + 1. Qt.py is using PySide 1 or 2. + 2. A `base` argument is not provided. + + See :func:`QtCompat.wrapInstance()` + + Arguments: + ptr (int): Pointer to QObject in memory + base (QObject, optional): Base class to wrap with. Defaults to QObject, + which should handle anything. + + """ + assert (base is None) or issubclass(base, Qt.QtCore.QObject), ( + "Argument 'base' must be of type ") + + if Qt.IsPyQt4 or Qt.IsPyQt5: + func = getattr(Qt, "_sip").wrapinstance + elif Qt.IsPySide2: + func = getattr(Qt, "_shiboken2").wrapInstance + elif Qt.IsPySide6: + func = getattr(Qt, "_shiboken6").wrapInstance + elif Qt.IsPySide: + func = getattr(Qt, "_shiboken").wrapInstance + else: + raise AttributeError("'module' has no attribute 'wrapInstance'") + + if base is None: + if Qt.IsPyQt4 or Qt.IsPyQt5: + base = Qt.QtCore.QObject + else: + q_object = func(long(ptr), Qt.QtCore.QObject) + meta_object = q_object.metaObject() + + while True: + class_name = meta_object.className() + + try: + base = getattr(Qt.QtWidgets, class_name) + except AttributeError: + try: + base = getattr(Qt.QtCore, class_name) + except AttributeError: + meta_object = meta_object.superClass() + continue + + break + + return func(long(ptr), base) + + +def _isvalid(object): + """Check if the object is valid to use in Python runtime. + + Usage: + See :func:`QtCompat.isValid()` + + Arguments: + object (QObject): QObject to check the validity of. + + """ + if hasattr(Qt, "_shiboken6"): + return getattr(Qt, "_shiboken6").isValid(object) + + elif hasattr(Qt, "_shiboken2"): + return getattr(Qt, "_shiboken2").isValid(object) + + elif hasattr(Qt, "_shiboken"): + return getattr(Qt, "_shiboken").isValid(object) + + elif hasattr(Qt, "_sip"): + return not getattr(Qt, "_sip").isdeleted(object) + + else: + raise AttributeError("'module' has no attribute isValid") + + +def _translate(context, sourceText, *args): + # In Qt4 bindings, translate can be passed 2 or 3 arguments + # In Qt5 bindings, translate can be passed 2 arguments + # The first argument is disambiguation[str] + # The last argument is n[int] + # The middle argument can be encoding[QtCore.QCoreApplication.Encoding] + try: + app = Qt.QtCore.QCoreApplication + except AttributeError: + raise NotImplementedError( + "Missing QCoreApplication implementation for {}".format( + Qt.__binding__ + ) + ) + + def get_arg(index): + try: + return args[index] + except IndexError: + pass + + n = -1 + encoding = None + + if len(args) == 3: + disambiguation, encoding, n = args + else: + disambiguation = get_arg(0) + n_or_encoding = get_arg(1) + + if isinstance(n_or_encoding, int): + n = n_or_encoding + else: + encoding = n_or_encoding + + if Qt.__binding__ in ("PySide2", "PySide6","PyQt5"): + sanitized_args = [context, sourceText, disambiguation, n] + else: + sanitized_args = [ + context, + sourceText, + disambiguation, + encoding or app.CodecForTr, + n, + ] + + return app.translate(*sanitized_args) + + +def _loadUi(uifile, baseinstance=None): + """Dynamically load a user interface from the given `uifile` + + This function calls `uic.loadUi` if using PyQt bindings, + else it implements a comparable binding for PySide. + + Documentation: + http://pyqt.sourceforge.net/Docs/PyQt5/designer.html#PyQt5.uic.loadUi + + Arguments: + uifile (str): Absolute path to Qt Designer file. + baseinstance (QWidget): Instantiated QWidget or subclass thereof + + Return: + baseinstance if `baseinstance` is not `None`. Otherwise + return the newly created instance of the user interface. + + """ + if hasattr(Qt, "_uic"): + return Qt._uic.loadUi(uifile, baseinstance) + + elif hasattr(Qt, "_QtUiTools"): + # Implement `PyQt5.uic.loadUi` for PySide(2) + + path = uifile + widget = baseinstance + + loader = Qt._QtUiTools.QUiLoader() + d = Qt.QtCore.QDir(os.path.dirname(path)) + loader.setWorkingDirectory(d) + + f = Qt.QtCore.QFile(path) + f.open(Qt.QtCore.QFile.ReadOnly) + ui = loader.load(path, widget) + f.close() + + layout = Qt.QtWidgets.QVBoxLayout() + layout.setObjectName("uiLayout") + layout.addWidget(ui) + widget.setLayout(layout) + layout.setContentsMargins(0, 0, 0, 0) + + baseinstance.setMinimumWidth(ui.minimumWidth()) + baseinstance.setMinimumHeight(ui.minimumHeight()) + baseinstance.setMaximumWidth(ui.maximumWidth()) + baseinstance.setMaximumHeight(ui.maximumHeight()) + + Qt.QtCore.QMetaObject.connectSlotsByName(widget) + + return ui + + else: + raise NotImplementedError("No implementation available for loadUi") + + +"""Misplaced members + +These members from the original submodule are misplaced relative PySide2 + +""" +_misplaced_members = { + "PySide6": { + "QtGui.QShortcut": "QtWidgets.QShortcut", + "QtGui.QStringListModel": "QtCore.QStringListModel", + "QtGui.QAction": "QtWidgets.QAction", + "QtUiTools.QUiLoader": ["QtCompat.loadUi", _loadUi], + "shiboken6.wrapInstance": ["QtCompat.wrapInstance", _wrapinstance], + "shiboken6.getCppPointer": ["QtCompat.getCppPointer", _getcpppointer], + "shiboken6.isValid": ["QtCompat.isValid", _isvalid], + "QtWidgets.qApp": "QtWidgets.QApplication.instance()", + "QtCore.QCoreApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtWidgets.QApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtCore.qInstallMessageHandler": [ + "QtCompat.qInstallMessageHandler", _qInstallMessageHandler + ], + "QtWidgets.QStyleOptionViewItem": "QtCompat.QStyleOptionViewItemV4", + "QtMultimedia.QSound": "QtMultimedia.QSound", + }, + "PySide2": { + "QtCore.QStringListModel": "QtCore.QStringListModel", + "QtGui.QStringListModel": "QtCore.QStringListModel", + "QtUiTools.QUiLoader": ["QtCompat.loadUi", _loadUi], + "shiboken2.wrapInstance": ["QtCompat.wrapInstance", _wrapinstance], + "shiboken2.getCppPointer": ["QtCompat.getCppPointer", _getcpppointer], + "shiboken2.isValid": ["QtCompat.isValid", _isvalid], + "QtWidgets.qApp": "QtWidgets.QApplication.instance()", + "QtCore.QCoreApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtWidgets.QApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtCore.qInstallMessageHandler": [ + "QtCompat.qInstallMessageHandler", _qInstallMessageHandler + ], + "QtWidgets.QStyleOptionViewItem": "QtCompat.QStyleOptionViewItemV4", + "QtMultimedia.QSound": "QtMultimedia.QSound", + }, + "PyQt5": { + "QtCore.pyqtProperty": "QtCore.Property", + "QtCore.pyqtSignal": "QtCore.Signal", + "QtCore.pyqtSlot": "QtCore.Slot", + "uic.loadUi": ["QtCompat.loadUi", _loadUi], + "sip.wrapinstance": ["QtCompat.wrapInstance", _wrapinstance], + "sip.unwrapinstance": ["QtCompat.getCppPointer", _getcpppointer], + "sip.isdeleted": ["QtCompat.isValid", _isvalid], + "QtWidgets.qApp": "QtWidgets.QApplication.instance()", + "QtCore.QCoreApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtWidgets.QApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtCore.qInstallMessageHandler": [ + "QtCompat.qInstallMessageHandler", _qInstallMessageHandler + ], + "QtWidgets.QStyleOptionViewItem": "QtCompat.QStyleOptionViewItemV4", + "QtMultimedia.QSound": "QtMultimedia.QSound", + }, + "PySide": { + "QtGui.QAbstractProxyModel": "QtCore.QAbstractProxyModel", + "QtGui.QSortFilterProxyModel": "QtCore.QSortFilterProxyModel", + "QtGui.QStringListModel": "QtCore.QStringListModel", + "QtGui.QItemSelection": "QtCore.QItemSelection", + "QtGui.QItemSelectionModel": "QtCore.QItemSelectionModel", + "QtGui.QItemSelectionRange": "QtCore.QItemSelectionRange", + "QtGui.QAbstractPrintDialog": "QtPrintSupport.QAbstractPrintDialog", + "QtGui.QPageSetupDialog": "QtPrintSupport.QPageSetupDialog", + "QtGui.QPrintDialog": "QtPrintSupport.QPrintDialog", + "QtGui.QPrintEngine": "QtPrintSupport.QPrintEngine", + "QtGui.QPrintPreviewDialog": "QtPrintSupport.QPrintPreviewDialog", + "QtGui.QPrintPreviewWidget": "QtPrintSupport.QPrintPreviewWidget", + "QtGui.QPrinter": "QtPrintSupport.QPrinter", + "QtGui.QPrinterInfo": "QtPrintSupport.QPrinterInfo", + "QtUiTools.QUiLoader": ["QtCompat.loadUi", _loadUi], + "shiboken.wrapInstance": ["QtCompat.wrapInstance", _wrapinstance], + "shiboken.unwrapInstance": ["QtCompat.getCppPointer", _getcpppointer], + "shiboken.isValid": ["QtCompat.isValid", _isvalid], + "QtGui.qApp": "QtWidgets.QApplication.instance()", + "QtCore.QCoreApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtGui.QApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtCore.qInstallMsgHandler": [ + "QtCompat.qInstallMessageHandler", _qInstallMessageHandler + ], + "QtGui.QStyleOptionViewItemV4": "QtCompat.QStyleOptionViewItemV4", + "QtGui.QSound": "QtMultimedia.QSound", + }, + "PyQt4": { + "QtGui.QAbstractProxyModel": "QtCore.QAbstractProxyModel", + "QtGui.QSortFilterProxyModel": "QtCore.QSortFilterProxyModel", + "QtGui.QItemSelection": "QtCore.QItemSelection", + "QtGui.QStringListModel": "QtCore.QStringListModel", + "QtGui.QItemSelectionModel": "QtCore.QItemSelectionModel", + "QtCore.pyqtProperty": "QtCore.Property", + "QtCore.pyqtSignal": "QtCore.Signal", + "QtCore.pyqtSlot": "QtCore.Slot", + "QtGui.QItemSelectionRange": "QtCore.QItemSelectionRange", + "QtGui.QAbstractPrintDialog": "QtPrintSupport.QAbstractPrintDialog", + "QtGui.QPageSetupDialog": "QtPrintSupport.QPageSetupDialog", + "QtGui.QPrintDialog": "QtPrintSupport.QPrintDialog", + "QtGui.QPrintEngine": "QtPrintSupport.QPrintEngine", + "QtGui.QPrintPreviewDialog": "QtPrintSupport.QPrintPreviewDialog", + "QtGui.QPrintPreviewWidget": "QtPrintSupport.QPrintPreviewWidget", + "QtGui.QPrinter": "QtPrintSupport.QPrinter", + "QtGui.QPrinterInfo": "QtPrintSupport.QPrinterInfo", + "uic.loadUi": ["QtCompat.loadUi", _loadUi], + "sip.wrapinstance": ["QtCompat.wrapInstance", _wrapinstance], + "sip.unwrapinstance": ["QtCompat.getCppPointer", _getcpppointer], + "sip.isdeleted": ["QtCompat.isValid", _isvalid], + "QtCore.QString": "str", + "QtGui.qApp": "QtWidgets.QApplication.instance()", + "QtCore.QCoreApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtGui.QApplication.translate": [ + "QtCompat.translate", _translate + ], + "QtCore.qInstallMsgHandler": [ + "QtCompat.qInstallMessageHandler", _qInstallMessageHandler + ], + "QtGui.QStyleOptionViewItemV4": "QtCompat.QStyleOptionViewItemV4", + "QtGui.QSound": "QtMultimedia.QSound", + } +} + +""" Compatibility Members + +This dictionary is used to build Qt.QtCompat objects that provide a consistent +interface for obsolete members, and differences in binding return values. + +{ + "binding": { + "classname": { + "targetname": "binding_namespace", + } + } +} +""" +_compatibility_members = { + "PySide6": { + "QWidget": { + "grab": "QtWidgets.QWidget.grab", + }, + "QHeaderView": { + "sectionsClickable": "QtWidgets.QHeaderView.sectionsClickable", + "setSectionsClickable": + "QtWidgets.QHeaderView.setSectionsClickable", + "sectionResizeMode": "QtWidgets.QHeaderView.sectionResizeMode", + "setSectionResizeMode": + "QtWidgets.QHeaderView.setSectionResizeMode", + "sectionsMovable": "QtWidgets.QHeaderView.sectionsMovable", + "setSectionsMovable": "QtWidgets.QHeaderView.setSectionsMovable", + }, + "QFileDialog": { + "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", + "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", + "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", + }, + }, + "PySide2": { + "QWidget": { + "grab": "QtWidgets.QWidget.grab", + }, + "QHeaderView": { + "sectionsClickable": "QtWidgets.QHeaderView.sectionsClickable", + "setSectionsClickable": + "QtWidgets.QHeaderView.setSectionsClickable", + "sectionResizeMode": "QtWidgets.QHeaderView.sectionResizeMode", + "setSectionResizeMode": + "QtWidgets.QHeaderView.setSectionResizeMode", + "sectionsMovable": "QtWidgets.QHeaderView.sectionsMovable", + "setSectionsMovable": "QtWidgets.QHeaderView.setSectionsMovable", + }, + "QFileDialog": { + "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", + "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", + "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", + }, + }, + "PyQt5": { + "QWidget": { + "grab": "QtWidgets.QWidget.grab", + }, + "QHeaderView": { + "sectionsClickable": "QtWidgets.QHeaderView.sectionsClickable", + "setSectionsClickable": + "QtWidgets.QHeaderView.setSectionsClickable", + "sectionResizeMode": "QtWidgets.QHeaderView.sectionResizeMode", + "setSectionResizeMode": + "QtWidgets.QHeaderView.setSectionResizeMode", + "sectionsMovable": "QtWidgets.QHeaderView.sectionsMovable", + "setSectionsMovable": "QtWidgets.QHeaderView.setSectionsMovable", + }, + "QFileDialog": { + "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", + "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", + "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", + }, + }, + "PySide": { + "QWidget": { + "grab": "QtWidgets.QPixmap.grabWidget", + }, + "QHeaderView": { + "sectionsClickable": "QtWidgets.QHeaderView.isClickable", + "setSectionsClickable": "QtWidgets.QHeaderView.setClickable", + "sectionResizeMode": "QtWidgets.QHeaderView.resizeMode", + "setSectionResizeMode": "QtWidgets.QHeaderView.setResizeMode", + "sectionsMovable": "QtWidgets.QHeaderView.isMovable", + "setSectionsMovable": "QtWidgets.QHeaderView.setMovable", + }, + "QFileDialog": { + "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", + "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", + "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", + }, + }, + "PyQt4": { + "QWidget": { + "grab": "QtWidgets.QPixmap.grabWidget", + }, + "QHeaderView": { + "sectionsClickable": "QtWidgets.QHeaderView.isClickable", + "setSectionsClickable": "QtWidgets.QHeaderView.setClickable", + "sectionResizeMode": "QtWidgets.QHeaderView.resizeMode", + "setSectionResizeMode": "QtWidgets.QHeaderView.setResizeMode", + "sectionsMovable": "QtWidgets.QHeaderView.isMovable", + "setSectionsMovable": "QtWidgets.QHeaderView.setMovable", + }, + "QFileDialog": { + "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", + "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", + "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", + }, + }, +} + + +def _apply_site_config(): + try: + import QtSiteConfig + except ImportError: + # If no QtSiteConfig module found, no modifications + # to _common_members are needed. + pass + else: + # Provide the ability to modify the dicts used to build Qt.py + if hasattr(QtSiteConfig, 'update_members'): + QtSiteConfig.update_members(_common_members) + + if hasattr(QtSiteConfig, 'update_misplaced_members'): + QtSiteConfig.update_misplaced_members(members=_misplaced_members) + + if hasattr(QtSiteConfig, 'update_compatibility_members'): + QtSiteConfig.update_compatibility_members( + members=_compatibility_members) + + +def _new_module(name): + return types.ModuleType(__name__ + "." + name) + + +def _import_sub_module(module, name): + """import_sub_module will mimic the function of importlib.import_module""" + module = __import__(module.__name__ + "." + name) + for level in name.split("."): + module = getattr(module, level) + return module + + +def _setup(module, extras): + """Install common submodules""" + + Qt.__binding__ = module.__name__ + + def _warn_import_error(exc, module): + msg = str(exc) + if "No module named" in msg: + return + _warn("ImportError(%s): %s" % (module, msg)) + + for name in list(_common_members) + extras: + try: + submodule = _import_sub_module( + module, name) + except ImportError as e: + try: + # For extra modules like sip and shiboken that may not be + # children of the binding. + submodule = __import__(name) + except ImportError as e2: + _warn_import_error(e, name) + _warn_import_error(e2, name) + continue + + setattr(Qt, "_" + name, submodule) + + if name not in extras: + # Store reference to original binding, + # but don't store speciality modules + # such as uic or QtUiTools + setattr(Qt, name, _new_module(name)) + + +def _reassign_misplaced_members(binding): + """Apply misplaced members from `binding` to Qt.py + + Arguments: + binding (dict): Misplaced members + + """ + + for src, dst in _misplaced_members[binding].items(): + dst_value = None + + src_parts = src.split(".") + src_module = src_parts[0] + src_member = None + if len(src_parts) > 1: + src_member = src_parts[1:] + + if isinstance(dst, (list, tuple)): + dst, dst_value = dst + + dst_parts = dst.split(".") + dst_module = dst_parts[0] + dst_member = None + if len(dst_parts) > 1: + dst_member = dst_parts[1] + + # Get the member we want to store in the namesapce. + if not dst_value: + try: + _part = getattr(Qt, "_" + src_module) + while src_member: + member = src_member.pop(0) + _part = getattr(_part, member) + dst_value = _part + except AttributeError: + # If the member we want to store in the namespace does not + # exist, there is no need to continue. This can happen if a + # request was made to rename a member that didn't exist, for + # example if QtWidgets isn't available on the target platform. + _log("Misplaced member has no source: {0}".format(src)) + continue + + try: + src_object = getattr(Qt, dst_module) + except AttributeError: + if dst_module not in _common_members: + # Only create the Qt parent module if its listed in + # _common_members. Without this check, if you remove QtCore + # from _common_members, the default _misplaced_members will add + # Qt.QtCore so it can add Signal, Slot, etc. + msg = 'Not creating missing member module "{m}" for "{c}"' + _log(msg.format(m=dst_module, c=dst_member)) + continue + # If the dst is valid but the Qt parent module does not exist + # then go ahead and create a new module to contain the member. + setattr(Qt, dst_module, _new_module(dst_module)) + src_object = getattr(Qt, dst_module) + # Enable direct import of the new module + sys.modules[__name__ + "." + dst_module] = src_object + + if not dst_value: + dst_value = getattr(Qt, "_" + src_module) + if src_member: + dst_value = getattr(dst_value, src_member) + + setattr( + src_object, + dst_member or dst_module, + dst_value + ) + + +def _build_compatibility_members(binding, decorators=None): + """Apply `binding` to QtCompat + + Arguments: + binding (str): Top level binding in _compatibility_members. + decorators (dict, optional): Provides the ability to decorate the + original Qt methods when needed by a binding. This can be used + to change the returned value to a standard value. The key should + be the classname, the value is a dict where the keys are the + target method names, and the values are the decorator functions. + + """ + + decorators = decorators or dict() + + # Allow optional site-level customization of the compatibility members. + # This method does not need to be implemented in QtSiteConfig. + try: + import QtSiteConfig + except ImportError: + pass + else: + if hasattr(QtSiteConfig, 'update_compatibility_decorators'): + QtSiteConfig.update_compatibility_decorators(binding, decorators) + + _QtCompat = type("QtCompat", (object,), {}) + + for classname, bindings in _compatibility_members[binding].items(): + attrs = {} + for target, binding in bindings.items(): + namespaces = binding.split('.') + try: + src_object = getattr(Qt, "_" + namespaces[0]) + except AttributeError as e: + _log("QtCompat: AttributeError: %s" % e) + # Skip reassignment of non-existing members. + # This can happen if a request was made to + # rename a member that didn't exist, for example + # if QtWidgets isn't available on the target platform. + continue + + # Walk down any remaining namespace getting the object assuming + # that if the first namespace exists the rest will exist. + for namespace in namespaces[1:]: + src_object = getattr(src_object, namespace) + + # decorate the Qt method if a decorator was provided. + if target in decorators.get(classname, []): + # staticmethod must be called on the decorated method to + # prevent a TypeError being raised when the decorated method + # is called. + src_object = staticmethod( + decorators[classname][target](src_object)) + + attrs[target] = src_object + + # Create the QtCompat class and install it into the namespace + compat_class = type(classname, (_QtCompat,), attrs) + setattr(Qt.QtCompat, classname, compat_class) + + +def _pyside6(): + """Initialise PySide6 + + These functions serve to test the existence of a binding + along with set it up in such a way that it aligns with + the final step; adding members from the original binding + to Qt.py + + """ + + import PySide6 as module + extras = ["QtUiTools"] + try: + import shiboken6 + extras.append("shiboken6") + except ImportError as e: + print("ImportError: %s" % e) + + _setup(module, extras) + Qt.__binding_version__ = module.__version__ + + if hasattr(Qt, "_shiboken6"): + Qt.QtCompat.wrapInstance = _wrapinstance + Qt.QtCompat.getCppPointer = _getcpppointer + Qt.QtCompat.delete = shiboken6.delete + + if hasattr(Qt, "_QtUiTools"): + Qt.QtCompat.loadUi = _loadUi + + if hasattr(Qt, "_QtCore"): + Qt.__qt_version__ = Qt._QtCore.qVersion() + Qt.QtCompat.dataChanged = ( + lambda self, topleft, bottomright, roles=None: + self.dataChanged.emit(topleft, bottomright, roles or []) + ) + + if hasattr(Qt, "_QtWidgets"): + Qt.QtCompat.setSectionResizeMode = \ + Qt._QtWidgets.QHeaderView.setSectionResizeMode + + _reassign_misplaced_members("PySide6") + _build_compatibility_members("PySide6") + + +def _pyside2(): + """Initialise PySide2 + + These functions serve to test the existence of a binding + along with set it up in such a way that it aligns with + the final step; adding members from the original binding + to Qt.py + + """ + + import PySide2 as module + extras = ["QtUiTools"] + try: + try: + # Before merge of PySide and shiboken + import shiboken2 + except ImportError: + # After merge of PySide and shiboken, May 2017 + from PySide2 import shiboken2 + extras.append("shiboken2") + except ImportError: + pass + + _setup(module, extras) + Qt.__binding_version__ = module.__version__ + + if hasattr(Qt, "_shiboken2"): + Qt.QtCompat.wrapInstance = _wrapinstance + Qt.QtCompat.getCppPointer = _getcpppointer + Qt.QtCompat.delete = shiboken2.delete + + if hasattr(Qt, "_QtUiTools"): + Qt.QtCompat.loadUi = _loadUi + + if hasattr(Qt, "_QtCore"): + Qt.__qt_version__ = Qt._QtCore.qVersion() + Qt.QtCompat.dataChanged = ( + lambda self, topleft, bottomright, roles=None: + self.dataChanged.emit(topleft, bottomright, roles or []) + ) + + if hasattr(Qt, "_QtWidgets"): + Qt.QtCompat.setSectionResizeMode = \ + Qt._QtWidgets.QHeaderView.setSectionResizeMode + + _reassign_misplaced_members("PySide2") + _build_compatibility_members("PySide2") + + +def _pyside(): + """Initialise PySide""" + + import PySide as module + extras = ["QtUiTools"] + try: + try: + # Before merge of PySide and shiboken + import shiboken + except ImportError: + # After merge of PySide and shiboken, May 2017 + from PySide import shiboken + extras.append("shiboken") + except ImportError: + pass + + _setup(module, extras) + Qt.__binding_version__ = module.__version__ + + if hasattr(Qt, "_shiboken"): + Qt.QtCompat.wrapInstance = _wrapinstance + Qt.QtCompat.getCppPointer = _getcpppointer + Qt.QtCompat.delete = shiboken.delete + + if hasattr(Qt, "_QtUiTools"): + Qt.QtCompat.loadUi = _loadUi + + if hasattr(Qt, "_QtGui"): + setattr(Qt, "QtWidgets", _new_module("QtWidgets")) + setattr(Qt, "_QtWidgets", Qt._QtGui) + if hasattr(Qt._QtGui, "QX11Info"): + setattr(Qt, "QtX11Extras", _new_module("QtX11Extras")) + Qt.QtX11Extras.QX11Info = Qt._QtGui.QX11Info + + Qt.QtCompat.setSectionResizeMode = Qt._QtGui.QHeaderView.setResizeMode + + if hasattr(Qt, "_QtCore"): + Qt.__qt_version__ = Qt._QtCore.qVersion() + Qt.QtCompat.dataChanged = ( + lambda self, topleft, bottomright, roles=None: + self.dataChanged.emit(topleft, bottomright) + ) + + _reassign_misplaced_members("PySide") + _build_compatibility_members("PySide") + + +def _pyqt5(): + """Initialise PyQt5""" + + import PyQt5 as module + extras = ["uic"] + + try: + # Relevant to PyQt5 5.11 and above + from PyQt5 import sip + extras += ["sip"] + except ImportError: + + try: + import sip + extras += ["sip"] + except ImportError: + sip = None + + _setup(module, extras) + if hasattr(Qt, "_sip"): + Qt.QtCompat.wrapInstance = _wrapinstance + Qt.QtCompat.getCppPointer = _getcpppointer + Qt.QtCompat.delete = sip.delete + + if hasattr(Qt, "_uic"): + Qt.QtCompat.loadUi = _loadUi + + if hasattr(Qt, "_QtCore"): + Qt.__binding_version__ = Qt._QtCore.PYQT_VERSION_STR + Qt.__qt_version__ = Qt._QtCore.QT_VERSION_STR + Qt.QtCompat.dataChanged = ( + lambda self, topleft, bottomright, roles=None: + self.dataChanged.emit(topleft, bottomright, roles or []) + ) + + if hasattr(Qt, "_QtWidgets"): + Qt.QtCompat.setSectionResizeMode = \ + Qt._QtWidgets.QHeaderView.setSectionResizeMode + + _reassign_misplaced_members("PyQt5") + _build_compatibility_members('PyQt5') + + +def _pyqt4(): + """Initialise PyQt4""" + + import sip + + # Validation of envivornment variable. Prevents an error if + # the variable is invalid since it's just a hint. + try: + hint = int(QT_SIP_API_HINT) + except TypeError: + hint = None # Variable was None, i.e. not set. + except ValueError: + raise ImportError("QT_SIP_API_HINT=%s must be a 1 or 2") + + for api in ("QString", + "QVariant", + "QDate", + "QDateTime", + "QTextStream", + "QTime", + "QUrl"): + try: + sip.setapi(api, hint or 2) + except AttributeError: + raise ImportError("PyQt4 < 4.6 isn't supported by Qt.py") + except ValueError: + actual = sip.getapi(api) + if not hint: + raise ImportError("API version already set to %d" % actual) + else: + # Having provided a hint indicates a soft constraint, one + # that doesn't throw an exception. + sys.stderr.write( + "Warning: API '%s' has already been set to %d.\n" + % (api, actual) + ) + + import PyQt4 as module + extras = ["uic"] + try: + import sip + extras.append(sip.__name__) + except ImportError: + sip = None + + _setup(module, extras) + if hasattr(Qt, "_sip"): + Qt.QtCompat.wrapInstance = _wrapinstance + Qt.QtCompat.getCppPointer = _getcpppointer + Qt.QtCompat.delete = sip.delete + + if hasattr(Qt, "_uic"): + Qt.QtCompat.loadUi = _loadUi + + if hasattr(Qt, "_QtGui"): + setattr(Qt, "QtWidgets", _new_module("QtWidgets")) + setattr(Qt, "_QtWidgets", Qt._QtGui) + if hasattr(Qt._QtGui, "QX11Info"): + setattr(Qt, "QtX11Extras", _new_module("QtX11Extras")) + Qt.QtX11Extras.QX11Info = Qt._QtGui.QX11Info + + Qt.QtCompat.setSectionResizeMode = \ + Qt._QtGui.QHeaderView.setResizeMode + + if hasattr(Qt, "_QtCore"): + Qt.__binding_version__ = Qt._QtCore.PYQT_VERSION_STR + Qt.__qt_version__ = Qt._QtCore.QT_VERSION_STR + Qt.QtCompat.dataChanged = ( + lambda self, topleft, bottomright, roles=None: + self.dataChanged.emit(topleft, bottomright) + ) + + _reassign_misplaced_members("PyQt4") + + # QFileDialog QtCompat decorator + def _standardizeQFileDialog(some_function): + """Decorator that makes PyQt4 return conform to other bindings""" + def wrapper(*args, **kwargs): + ret = (some_function(*args, **kwargs)) + + # PyQt4 only returns the selected filename, force it to a + # standard return of the selected filename, and a empty string + # for the selected filter + return ret, '' + + wrapper.__doc__ = some_function.__doc__ + wrapper.__name__ = some_function.__name__ + + return wrapper + + decorators = { + "QFileDialog": { + "getOpenFileName": _standardizeQFileDialog, + "getOpenFileNames": _standardizeQFileDialog, + "getSaveFileName": _standardizeQFileDialog, + } + } + _build_compatibility_members('PyQt4', decorators) + + +def _none(): + """Internal option (used in installer)""" + + Mock = type("Mock", (), {"__getattr__": lambda Qt, attr: None}) + + Qt.__binding__ = "None" + Qt.__qt_version__ = "0.0.0" + Qt.__binding_version__ = "0.0.0" + Qt.QtCompat.loadUi = lambda uifile, baseinstance=None: None + Qt.QtCompat.setSectionResizeMode = lambda *args, **kwargs: None + + for submodule in _common_members.keys(): + setattr(Qt, submodule, Mock()) + setattr(Qt, "_" + submodule, Mock()) + + +def _log(text): + if QT_VERBOSE: + sys.stdout.write("Qt.py [info]: %s\n" % text) + + +def _warn(text): + try: + sys.stderr.write("Qt.py [warning]: %s\n" % text) + except UnicodeDecodeError: + import locale + encoding = locale.getpreferredencoding() + sys.stderr.write("Qt.py [warning]: %s\n" % text.decode(encoding)) + + +def _convert(lines): + """Convert compiled .ui file from PySide2 to Qt.py + + Arguments: + lines (list): Each line of of .ui file + + Usage: + >> with open("myui.py") as f: + .. lines = _convert(f.readlines()) + + """ + + def parse(line): + line = line.replace("from PySide2 import", "from Qt import QtCompat,") + line = line.replace("QtWidgets.QApplication.translate", + "QtCompat.translate") + if "QtCore.SIGNAL" in line: + raise NotImplementedError("QtCore.SIGNAL is missing from PyQt5 " + "and so Qt.py does not support it: you " + "should avoid defining signals inside " + "your ui files.") + return line + + parsed = list() + for line in lines: + line = parse(line) + parsed.append(line) + + return parsed + + +def _cli(args): + """Qt.py command-line interface""" + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument("--convert", + help="Path to compiled Python module, e.g. my_ui.py") + parser.add_argument("--compile", + help="Accept raw .ui file and compile with native " + "PySide2 compiler.") + parser.add_argument("--stdout", + help="Write to stdout instead of file", + action="store_true") + parser.add_argument("--stdin", + help="Read from stdin instead of file", + action="store_true") + + args = parser.parse_args(args) + + if args.stdout: + raise NotImplementedError("--stdout") + + if args.stdin: + raise NotImplementedError("--stdin") + + if args.compile: + raise NotImplementedError("--compile") + + if args.convert: + sys.stdout.write("#\n" + "# WARNING: --convert is an ALPHA feature.\n#\n" + "# See https://github.com/mottosso/Qt.py/pull/132\n" + "# for details.\n" + "#\n") + + # + # ------> Read + # + with open(args.convert) as f: + lines = _convert(f.readlines()) + + backup = "%s_backup%s" % os.path.splitext(args.convert) + sys.stdout.write("Creating \"%s\"..\n" % backup) + shutil.copy(args.convert, backup) + + # + # <------ Write + # + with open(args.convert, "w") as f: + f.write("".join(lines)) + + sys.stdout.write("Successfully converted \"%s\"\n" % args.convert) + + +class MissingMember(object): + """ + A placeholder type for a missing Qt object not + included in Qt.py + + Args: + name (str): The name of the missing type + details (str): An optional custom error message + """ + ERR_TMPL = ("{} is not a common object across PySide2 " + "and the other Qt bindings. It is not included " + "as a common member in the Qt.py layer") + + def __init__(self, name, details=''): + self.__name = name + self.__err = self.ERR_TMPL.format(name) + + if details: + self.__err = "{}: {}".format(self.__err, details) + + def __repr__(self): + return "<{}: {}>".format(self.__class__.__name__, self.__name) + + def __getattr__(self, name): + raise NotImplementedError(self.__err) + + def __call__(self, *a, **kw): + raise NotImplementedError(self.__err) + + +def _install(): + # Default order (customize order and content via QT_PREFERRED_BINDING) + default_order = ("PySide6", "PySide2", "PyQt5", "PySide", "PyQt4") + preferred_order = None + if QT_PREFERRED_BINDING_JSON: + # A per-vendor preferred binding customization was defined + # This should be a dictionary of the full Qt.py module namespace to + # apply binding settings to. The "default" key can be used to apply + # custom bindings to all modules not explicitly defined. If the json + # data is invalid this will raise a exception. + # Example: + # {"mylibrary.vendor.Qt": ["PySide2"], "default":["PyQt5","PyQt4"]} + try: + preferred_bindings = json.loads(QT_PREFERRED_BINDING_JSON) + except ValueError: + # Python 2 raises ValueError, Python 3 raises json.JSONDecodeError + # a subclass of ValueError + _warn("Failed to parse QT_PREFERRED_BINDING_JSON='%s'" + % QT_PREFERRED_BINDING_JSON) + _warn("Falling back to default preferred order") + else: + preferred_order = preferred_bindings.get(__name__) + # If no matching binding was used, optionally apply a default. + if preferred_order is None: + preferred_order = preferred_bindings.get("default", None) + if preferred_order is None: + # If a json preferred binding was not used use, respect the + # QT_PREFERRED_BINDING environment variable if defined. + preferred_order = list( + b for b in QT_PREFERRED_BINDING.split(os.pathsep) if b + ) + + order = preferred_order or default_order + + available = { + "PySide6": _pyside6, + "PySide2": _pyside2, + "PyQt5": _pyqt5, + "PySide": _pyside, + "PyQt4": _pyqt4, + "None": _none + } + + _log("Order: '%s'" % "', '".join(order)) + + # Allow site-level customization of the available modules. + _apply_site_config() + + found_binding = False + for name in order: + _log("Trying %s" % name) + + try: + available[name]() + found_binding = True + break + + except ImportError as e: + _log("ImportError: %s" % e) + + except KeyError: + _log("ImportError: Preferred binding '%s' not found." % name) + + if not found_binding: + # If not binding were found, throw this error + raise ImportError("No Qt binding were found.") + + # Install individual members + for name, members in _common_members.items(): + try: + their_submodule = getattr(Qt, "_%s" % name) + except AttributeError: + continue + + our_submodule = getattr(Qt, name) + + # Enable import * + __all__.append(name) + + # Enable direct import of submodule, + # e.g. import Qt.QtCore + sys.modules[__name__ + "." + name] = our_submodule + + for member in members: + # Accept that a submodule may miss certain members. + try: + their_member = getattr(their_submodule, member) + except AttributeError: + _log("'%s.%s' was missing." % (name, member)) + continue + + setattr(our_submodule, member, their_member) + + # Install missing member placeholders + for name, members in _missing_members.items(): + our_submodule = getattr(Qt, name) + + for member in members: + + # If the submodule already has this member installed, + # either by the common members, or the site config, + # then skip installing this one over it. + if hasattr(our_submodule, member): + continue + + placeholder = MissingMember("{}.{}".format(name, member), + details=members[member]) + setattr(our_submodule, member, placeholder) + + # Enable direct import of QtCompat + sys.modules[__name__ + ".QtCompat"] = Qt.QtCompat + + # Backwards compatibility + if hasattr(Qt.QtCompat, 'loadUi'): + Qt.QtCompat.load_ui = Qt.QtCompat.loadUi + + +_install() + +# Setup Binding Enum states +Qt.IsPySide6 = Qt.__binding__ == "PySide6" +Qt.IsPySide2 = Qt.__binding__ == 'PySide2' +Qt.IsPyQt5 = Qt.__binding__ == 'PyQt5' +Qt.IsPySide = Qt.__binding__ == 'PySide' +Qt.IsPyQt4 = Qt.__binding__ == 'PyQt4' + +"""Augment QtCompat + +QtCompat contains wrappers and added functionality +to the original bindings, such as the CLI interface +and otherwise incompatible members between bindings, +such as `QHeaderView.setSectionResizeMode`. + +""" + +Qt.QtCompat._cli = _cli +Qt.QtCompat._convert = _convert + +# Enable command-line interface +if __name__ == "__main__": + _cli(sys.argv[1:]) + + +# The MIT License (MIT) +# +# Copyright (c) 2016-2017 Marcus Ottosson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# In PySide(2), loadUi does not exist, so we implement it +# +# `_UiLoader` is adapted from the qtpy project, which was further influenced +# by qt-helpers which was released under a 3-clause BSD license which in turn +# is based on a solution at: +# +# - https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8 +# +# The License for this code is as follows: +# +# qt-helpers - a common front-end to various Qt modules +# +# Copyright (c) 2015, Chris Beaumont and Thomas Robitaille +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# * Neither the name of the Glue project nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Which itself was based on the solution at +# +# https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8 +# +# which was released under the MIT license: +# +# Copyright (c) 2011 Sebastian Wiesner +# Modifications by Charl Botha +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files +# (the "Software"),to deal in the Software without restriction, +# including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/2023/scripts/animation_tools/studiolibrary/studiovendor/__init__.py b/2023/scripts/animation_tools/studiolibrary/studiovendor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/2023/scripts/animation_tools/studiolibrary/studiovendor/six.py b/2023/scripts/animation_tools/studiolibrary/studiovendor/six.py new file mode 100644 index 0000000..7aed626 --- /dev/null +++ b/2023/scripts/animation_tools/studiolibrary/studiovendor/six.py @@ -0,0 +1,973 @@ +# Copyright (c) 2010-2018 Benjamin Peterson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +Utilities for writing code that runs on Python 2 and 3 + +WARNING: THIS VERSION OF SIX HAS BEEN MODIFIED. + +Changed line 658: + + def u(s): + s = s.replace(r'\\', r'\\\\') + if isinstance(s, unicode): + return s + else: + return unicode(s, "unicode_escape") +""" + +from __future__ import absolute_import + +import functools +import itertools +import operator +import sys +import types + +__author__ = "Benjamin Peterson " +__version__ = "1.12.0" + + +# Useful for very coarse version differentiation. +PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 +PY34 = sys.version_info[0:2] >= (3, 4) + +if PY3: + string_types = str, + integer_types = int, + class_types = type, + text_type = str + binary_type = bytes + + MAXSIZE = sys.maxsize +else: + string_types = basestring, + integer_types = (int, long) + class_types = (type, types.ClassType) + text_type = unicode + binary_type = str + + if sys.platform.startswith("java"): + # Jython always uses 32 bits. + MAXSIZE = int((1 << 31) - 1) + else: + # It's possible to have sizeof(long) != sizeof(Py_ssize_t). + class X(object): + + def __len__(self): + return 1 << 31 + try: + len(X()) + except OverflowError: + # 32-bit + MAXSIZE = int((1 << 31) - 1) + else: + # 64-bit + MAXSIZE = int((1 << 63) - 1) + del X + + +def _add_doc(func, doc): + """Add documentation to a function.""" + func.__doc__ = doc + + +def _import_module(name): + """Import module, returning the module after the last dot.""" + __import__(name) + return sys.modules[name] + + +class _LazyDescr(object): + + def __init__(self, name): + self.name = name + + def __get__(self, obj, tp): + result = self._resolve() + setattr(obj, self.name, result) # Invokes __set__. + try: + # This is a bit ugly, but it avoids running this again by + # removing this descriptor. + delattr(obj.__class__, self.name) + except AttributeError: + pass + return result + + +class MovedModule(_LazyDescr): + + def __init__(self, name, old, new=None): + super(MovedModule, self).__init__(name) + if PY3: + if new is None: + new = name + self.mod = new + else: + self.mod = old + + def _resolve(self): + return _import_module(self.mod) + + def __getattr__(self, attr): + _module = self._resolve() + value = getattr(_module, attr) + setattr(self, attr, value) + return value + + +class _LazyModule(types.ModuleType): + + def __init__(self, name): + super(_LazyModule, self).__init__(name) + self.__doc__ = self.__class__.__doc__ + + def __dir__(self): + attrs = ["__doc__", "__name__"] + attrs += [attr.name for attr in self._moved_attributes] + return attrs + + # Subclasses should override this + _moved_attributes = [] + + +class MovedAttribute(_LazyDescr): + + def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): + super(MovedAttribute, self).__init__(name) + if PY3: + if new_mod is None: + new_mod = name + self.mod = new_mod + if new_attr is None: + if old_attr is None: + new_attr = name + else: + new_attr = old_attr + self.attr = new_attr + else: + self.mod = old_mod + if old_attr is None: + old_attr = name + self.attr = old_attr + + def _resolve(self): + module = _import_module(self.mod) + return getattr(module, self.attr) + + +class _SixMetaPathImporter(object): + + """ + A meta path importer to import six.moves and its submodules. + + This class implements a PEP302 finder and loader. It should be compatible + with Python 2.5 and all existing versions of Python3 + """ + + def __init__(self, six_module_name): + self.name = six_module_name + self.known_modules = {} + + def _add_module(self, mod, *fullnames): + for fullname in fullnames: + self.known_modules[self.name + "." + fullname] = mod + + def _get_module(self, fullname): + return self.known_modules[self.name + "." + fullname] + + def find_module(self, fullname, path=None): + if fullname in self.known_modules: + return self + return None + + def __get_module(self, fullname): + try: + return self.known_modules[fullname] + except KeyError: + raise ImportError("This loader does not know module " + fullname) + + def load_module(self, fullname): + try: + # in case of a reload + return sys.modules[fullname] + except KeyError: + pass + mod = self.__get_module(fullname) + if isinstance(mod, MovedModule): + mod = mod._resolve() + else: + mod.__loader__ = self + sys.modules[fullname] = mod + return mod + + def is_package(self, fullname): + """ + Return true, if the named module is a package. + + We need this method to get correct spec objects with + Python 3.4 (see PEP451) + """ + return hasattr(self.__get_module(fullname), "__path__") + + def get_code(self, fullname): + """Return None + + Required, if is_package is implemented""" + self.__get_module(fullname) # eventually raises ImportError + return None + get_source = get_code # same as get_code + +_importer = _SixMetaPathImporter(__name__) + + +class _MovedItems(_LazyModule): + + """Lazy loading of moved objects""" + __path__ = [] # mark as package + + +_moved_attributes = [ + MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), + MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), + MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), + MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), + MovedAttribute("intern", "__builtin__", "sys"), + MovedAttribute("map", "itertools", "builtins", "imap", "map"), + MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), + MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), + MovedAttribute("getoutput", "commands", "subprocess"), + MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), + MovedAttribute("reduce", "__builtin__", "functools"), + MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), + MovedAttribute("StringIO", "StringIO", "io"), + MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserList", "UserList", "collections"), + MovedAttribute("UserString", "UserString", "collections"), + MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), + MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), + MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), + MovedModule("builtins", "__builtin__"), + MovedModule("configparser", "ConfigParser"), + MovedModule("copyreg", "copy_reg"), + MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), + MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), + MovedModule("http_cookies", "Cookie", "http.cookies"), + MovedModule("html_entities", "htmlentitydefs", "html.entities"), + MovedModule("html_parser", "HTMLParser", "html.parser"), + MovedModule("http_client", "httplib", "http.client"), + MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), + MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), + MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), + MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), + MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), + MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), + MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), + MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), + MovedModule("cPickle", "cPickle", "pickle"), + MovedModule("queue", "Queue"), + MovedModule("reprlib", "repr"), + MovedModule("socketserver", "SocketServer"), + MovedModule("_thread", "thread", "_thread"), + MovedModule("tkinter", "Tkinter"), + MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), + MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), + MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), + MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), + MovedModule("tkinter_tix", "Tix", "tkinter.tix"), + MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), + MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), + MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), + MovedModule("tkinter_colorchooser", "tkColorChooser", + "tkinter.colorchooser"), + MovedModule("tkinter_commondialog", "tkCommonDialog", + "tkinter.commondialog"), + MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), + MovedModule("tkinter_font", "tkFont", "tkinter.font"), + MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), + MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", + "tkinter.simpledialog"), + MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), + MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), + MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), + MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), + MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), + MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), +] +# Add windows specific modules. +if sys.platform == "win32": + _moved_attributes += [ + MovedModule("winreg", "_winreg"), + ] + +for attr in _moved_attributes: + setattr(_MovedItems, attr.name, attr) + if isinstance(attr, MovedModule): + _importer._add_module(attr, "moves." + attr.name) +del attr + +_MovedItems._moved_attributes = _moved_attributes + +moves = _MovedItems(__name__ + ".moves") +_importer._add_module(moves, "moves") + + +class Module_six_moves_urllib_parse(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_parse""" + + +_urllib_parse_moved_attributes = [ + MovedAttribute("ParseResult", "urlparse", "urllib.parse"), + MovedAttribute("SplitResult", "urlparse", "urllib.parse"), + MovedAttribute("parse_qs", "urlparse", "urllib.parse"), + MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), + MovedAttribute("urldefrag", "urlparse", "urllib.parse"), + MovedAttribute("urljoin", "urlparse", "urllib.parse"), + MovedAttribute("urlparse", "urlparse", "urllib.parse"), + MovedAttribute("urlsplit", "urlparse", "urllib.parse"), + MovedAttribute("urlunparse", "urlparse", "urllib.parse"), + MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), + MovedAttribute("quote", "urllib", "urllib.parse"), + MovedAttribute("quote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote", "urllib", "urllib.parse"), + MovedAttribute("unquote_plus", "urllib", "urllib.parse"), + MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"), + MovedAttribute("urlencode", "urllib", "urllib.parse"), + MovedAttribute("splitquery", "urllib", "urllib.parse"), + MovedAttribute("splittag", "urllib", "urllib.parse"), + MovedAttribute("splituser", "urllib", "urllib.parse"), + MovedAttribute("splitvalue", "urllib", "urllib.parse"), + MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), + MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), + MovedAttribute("uses_params", "urlparse", "urllib.parse"), + MovedAttribute("uses_query", "urlparse", "urllib.parse"), + MovedAttribute("uses_relative", "urlparse", "urllib.parse"), +] +for attr in _urllib_parse_moved_attributes: + setattr(Module_six_moves_urllib_parse, attr.name, attr) +del attr + +Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes + +_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), + "moves.urllib_parse", "moves.urllib.parse") + + +class Module_six_moves_urllib_error(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_error""" + + +_urllib_error_moved_attributes = [ + MovedAttribute("URLError", "urllib2", "urllib.error"), + MovedAttribute("HTTPError", "urllib2", "urllib.error"), + MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), +] +for attr in _urllib_error_moved_attributes: + setattr(Module_six_moves_urllib_error, attr.name, attr) +del attr + +Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes + +_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), + "moves.urllib_error", "moves.urllib.error") + + +class Module_six_moves_urllib_request(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_request""" + + +_urllib_request_moved_attributes = [ + MovedAttribute("urlopen", "urllib2", "urllib.request"), + MovedAttribute("install_opener", "urllib2", "urllib.request"), + MovedAttribute("build_opener", "urllib2", "urllib.request"), + MovedAttribute("pathname2url", "urllib", "urllib.request"), + MovedAttribute("url2pathname", "urllib", "urllib.request"), + MovedAttribute("getproxies", "urllib", "urllib.request"), + MovedAttribute("Request", "urllib2", "urllib.request"), + MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), + MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), + MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), + MovedAttribute("BaseHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), + MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), + MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), + MovedAttribute("FileHandler", "urllib2", "urllib.request"), + MovedAttribute("FTPHandler", "urllib2", "urllib.request"), + MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), + MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), + MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), + MovedAttribute("urlretrieve", "urllib", "urllib.request"), + MovedAttribute("urlcleanup", "urllib", "urllib.request"), + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + MovedAttribute("proxy_bypass", "urllib", "urllib.request"), + MovedAttribute("parse_http_list", "urllib2", "urllib.request"), + MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), +] +for attr in _urllib_request_moved_attributes: + setattr(Module_six_moves_urllib_request, attr.name, attr) +del attr + +Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes + +_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), + "moves.urllib_request", "moves.urllib.request") + + +class Module_six_moves_urllib_response(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_response""" + + +_urllib_response_moved_attributes = [ + MovedAttribute("addbase", "urllib", "urllib.response"), + MovedAttribute("addclosehook", "urllib", "urllib.response"), + MovedAttribute("addinfo", "urllib", "urllib.response"), + MovedAttribute("addinfourl", "urllib", "urllib.response"), +] +for attr in _urllib_response_moved_attributes: + setattr(Module_six_moves_urllib_response, attr.name, attr) +del attr + +Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes + +_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), + "moves.urllib_response", "moves.urllib.response") + + +class Module_six_moves_urllib_robotparser(_LazyModule): + + """Lazy loading of moved objects in six.moves.urllib_robotparser""" + + +_urllib_robotparser_moved_attributes = [ + MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), +] +for attr in _urllib_robotparser_moved_attributes: + setattr(Module_six_moves_urllib_robotparser, attr.name, attr) +del attr + +Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes + +_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), + "moves.urllib_robotparser", "moves.urllib.robotparser") + + +class Module_six_moves_urllib(types.ModuleType): + + """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" + __path__ = [] # mark as package + parse = _importer._get_module("moves.urllib_parse") + error = _importer._get_module("moves.urllib_error") + request = _importer._get_module("moves.urllib_request") + response = _importer._get_module("moves.urllib_response") + robotparser = _importer._get_module("moves.urllib_robotparser") + + def __dir__(self): + return ['parse', 'error', 'request', 'response', 'robotparser'] + +_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), + "moves.urllib") + + +def add_move(move): + """Add an item to six.moves.""" + setattr(_MovedItems, move.name, move) + + +def remove_move(name): + """Remove item from six.moves.""" + try: + delattr(_MovedItems, name) + except AttributeError: + try: + del moves.__dict__[name] + except KeyError: + raise AttributeError("no such move, %r" % (name,)) + + +if PY3: + _meth_func = "__func__" + _meth_self = "__self__" + + _func_closure = "__closure__" + _func_code = "__code__" + _func_defaults = "__defaults__" + _func_globals = "__globals__" +else: + _meth_func = "im_func" + _meth_self = "im_self" + + _func_closure = "func_closure" + _func_code = "func_code" + _func_defaults = "func_defaults" + _func_globals = "func_globals" + + +try: + advance_iterator = next +except NameError: + def advance_iterator(it): + return it.next() +next = advance_iterator + + +try: + callable = callable +except NameError: + def callable(obj): + return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) + + +if PY3: + def get_unbound_function(unbound): + return unbound + + create_bound_method = types.MethodType + + def create_unbound_method(func, cls): + return func + + Iterator = object +else: + def get_unbound_function(unbound): + return unbound.im_func + + def create_bound_method(func, obj): + return types.MethodType(func, obj, obj.__class__) + + def create_unbound_method(func, cls): + return types.MethodType(func, None, cls) + + class Iterator(object): + + def next(self): + return type(self).__next__(self) + + callable = callable +_add_doc(get_unbound_function, + """Get the function out of a possibly unbound function""") + + +get_method_function = operator.attrgetter(_meth_func) +get_method_self = operator.attrgetter(_meth_self) +get_function_closure = operator.attrgetter(_func_closure) +get_function_code = operator.attrgetter(_func_code) +get_function_defaults = operator.attrgetter(_func_defaults) +get_function_globals = operator.attrgetter(_func_globals) + + +if PY3: + def iterkeys(d, **kw): + return iter(d.keys(**kw)) + + def itervalues(d, **kw): + return iter(d.values(**kw)) + + def iteritems(d, **kw): + return iter(d.items(**kw)) + + def iterlists(d, **kw): + return iter(d.lists(**kw)) + + viewkeys = operator.methodcaller("keys") + + viewvalues = operator.methodcaller("values") + + viewitems = operator.methodcaller("items") +else: + def iterkeys(d, **kw): + return d.iterkeys(**kw) + + def itervalues(d, **kw): + return d.itervalues(**kw) + + def iteritems(d, **kw): + return d.iteritems(**kw) + + def iterlists(d, **kw): + return d.iterlists(**kw) + + viewkeys = operator.methodcaller("viewkeys") + + viewvalues = operator.methodcaller("viewvalues") + + viewitems = operator.methodcaller("viewitems") + +_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") +_add_doc(itervalues, "Return an iterator over the values of a dictionary.") +_add_doc(iteritems, + "Return an iterator over the (key, value) pairs of a dictionary.") +_add_doc(iterlists, + "Return an iterator over the (key, [values]) pairs of a dictionary.") + + +if PY3: + def b(s): + return s.encode("latin-1") + + def u(s, encoding=None): + return str(s) + unichr = chr + import struct + int2byte = struct.Struct(">B").pack + del struct + byte2int = operator.itemgetter(0) + indexbytes = operator.getitem + iterbytes = iter + import io + StringIO = io.StringIO + BytesIO = io.BytesIO + _assertCountEqual = "assertCountEqual" + if sys.version_info[1] <= 1: + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" + else: + _assertRaisesRegex = "assertRaisesRegex" + _assertRegex = "assertRegex" +else: + def b(s): + return s + # Workaround for standalone backslash + + def u(s, encoding="unicode_escape"): + + if not isinstance(s, basestring): + s = unicode(s, encoding) + + s = s.replace(r'\\', r'\\\\') + if isinstance(s, unicode): + return s + else: + return unicode(s, encoding) + unichr = unichr + int2byte = chr + + def byte2int(bs): + return ord(bs[0]) + + def indexbytes(buf, i): + return ord(buf[i]) + iterbytes = functools.partial(itertools.imap, ord) + import StringIO + StringIO = BytesIO = StringIO.StringIO + _assertCountEqual = "assertItemsEqual" + _assertRaisesRegex = "assertRaisesRegexp" + _assertRegex = "assertRegexpMatches" +_add_doc(b, """Byte literal""") +_add_doc(u, """Text literal""") + + +def assertCountEqual(self, *args, **kwargs): + return getattr(self, _assertCountEqual)(*args, **kwargs) + + +def assertRaisesRegex(self, *args, **kwargs): + return getattr(self, _assertRaisesRegex)(*args, **kwargs) + + +def assertRegex(self, *args, **kwargs): + return getattr(self, _assertRegex)(*args, **kwargs) + + +if PY3: + exec_ = getattr(moves.builtins, "exec") + + def reraise(tp, value, tb=None): + try: + if value is None: + value = tp() + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value + finally: + value = None + tb = None + +else: + def exec_(_code_, _globs_=None, _locs_=None): + """Execute code in a namespace.""" + if _globs_ is None: + frame = sys._getframe(1) + _globs_ = frame.f_globals + if _locs_ is None: + _locs_ = frame.f_locals + del frame + elif _locs_ is None: + _locs_ = _globs_ + exec("""exec _code_ in _globs_, _locs_""") + + exec_("""def reraise(tp, value, tb=None): + try: + raise tp, value, tb + finally: + tb = None +""") + + +if sys.version_info[:2] == (3, 2): + exec_("""def raise_from(value, from_value): + try: + if from_value is None: + raise value + raise value from from_value + finally: + value = None +""") +elif sys.version_info[:2] > (3, 2): + exec_("""def raise_from(value, from_value): + try: + raise value from from_value + finally: + value = None +""") +else: + def raise_from(value, from_value): + raise value + + +print_ = getattr(moves.builtins, "print", None) +if print_ is None: + def print_(*args, **kwargs): + """The new-style print function for Python 2.4 and 2.5.""" + fp = kwargs.pop("file", sys.stdout) + if fp is None: + return + + def write(data): + if not isinstance(data, basestring): + data = str(data) + # If the file has an encoding, encode unicode with it. + if (isinstance(fp, file) and + isinstance(data, unicode) and + fp.encoding is not None): + errors = getattr(fp, "errors", None) + if errors is None: + errors = "strict" + data = data.encode(fp.encoding, errors) + fp.write(data) + want_unicode = False + sep = kwargs.pop("sep", None) + if sep is not None: + if isinstance(sep, unicode): + want_unicode = True + elif not isinstance(sep, str): + raise TypeError("sep must be None or a string") + end = kwargs.pop("end", None) + if end is not None: + if isinstance(end, unicode): + want_unicode = True + elif not isinstance(end, str): + raise TypeError("end must be None or a string") + if kwargs: + raise TypeError("invalid keyword arguments to print()") + if not want_unicode: + for arg in args: + if isinstance(arg, unicode): + want_unicode = True + break + if want_unicode: + newline = unicode("\n") + space = unicode(" ") + else: + newline = "\n" + space = " " + if sep is None: + sep = space + if end is None: + end = newline + for i, arg in enumerate(args): + if i: + write(sep) + write(arg) + write(end) +if sys.version_info[:2] < (3, 3): + _print = print_ + + def print_(*args, **kwargs): + fp = kwargs.get("file", sys.stdout) + flush = kwargs.pop("flush", False) + _print(*args, **kwargs) + if flush and fp is not None: + fp.flush() + +_add_doc(reraise, """Reraise an exception.""") + +if sys.version_info[0:2] < (3, 4): + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + def wrapper(f): + f = functools.wraps(wrapped, assigned, updated)(f) + f.__wrapped__ = wrapped + return f + return wrapper +else: + wraps = functools.wraps + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(type): + + def __new__(cls, name, this_bases, d): + return meta(name, bases, d) + + @classmethod + def __prepare__(cls, name, this_bases): + return meta.__prepare__(name, bases) + return type.__new__(metaclass, 'temporary_class', (), {}) + + +def add_metaclass(metaclass): + """Class decorator for creating a class with a metaclass.""" + def wrapper(cls): + orig_vars = cls.__dict__.copy() + slots = orig_vars.get('__slots__') + if slots is not None: + if isinstance(slots, str): + slots = [slots] + for slots_var in slots: + orig_vars.pop(slots_var) + orig_vars.pop('__dict__', None) + orig_vars.pop('__weakref__', None) + if hasattr(cls, '__qualname__'): + orig_vars['__qualname__'] = cls.__qualname__ + return metaclass(cls.__name__, cls.__bases__, orig_vars) + return wrapper + + +def ensure_binary(s, encoding='utf-8', errors='strict'): + """Coerce **s** to six.binary_type. + + For Python 2: + - `unicode` -> encoded to `str` + - `str` -> `str` + + For Python 3: + - `str` -> encoded to `bytes` + - `bytes` -> `bytes` + """ + if isinstance(s, text_type): + return s.encode(encoding, errors) + elif isinstance(s, binary_type): + return s + else: + raise TypeError("not expecting type '%s'" % type(s)) + + +def ensure_str(s, encoding='utf-8', errors='strict'): + """Coerce *s* to `str`. + + For Python 2: + - `unicode` -> encoded to `str` + - `str` -> `str` + + For Python 3: + - `str` -> `str` + - `bytes` -> decoded to `str` + """ + if not isinstance(s, (text_type, binary_type)): + raise TypeError("not expecting type '%s'" % type(s)) + if PY2 and isinstance(s, text_type): + s = s.encode(encoding, errors) + elif PY3 and isinstance(s, binary_type): + s = s.decode(encoding, errors) + return s + + +def ensure_text(s, encoding='utf-8', errors='strict'): + """Coerce *s* to six.text_type. + + For Python 2: + - `unicode` -> `unicode` + - `str` -> `unicode` + + For Python 3: + - `str` -> `str` + - `bytes` -> decoded to `str` + """ + if isinstance(s, binary_type): + return s.decode(encoding, errors) + elif isinstance(s, text_type): + return s + else: + raise TypeError("not expecting type '%s'" % type(s)) + + + +def python_2_unicode_compatible(klass): + """ + A decorator that defines __unicode__ and __str__ methods under Python 2. + Under Python 3 it does nothing. + + To support Python 2 and 3 with a single code base, define a __str__ method + returning text and apply this decorator to the class. + """ + if PY2: + if '__str__' not in klass.__dict__: + raise ValueError("@python_2_unicode_compatible cannot be applied " + "to %s because it doesn't define __str__()." % + klass.__name__) + klass.__unicode__ = klass.__str__ + klass.__str__ = lambda self: self.__unicode__().encode('utf-8') + return klass + + +# Complete the moves implementation. +# This code is at the end of this module to speed up module loading. +# Turn this module into a package. +__path__ = [] # required for PEP 302 and PEP 451 +__package__ = __name__ # see PEP 366 @ReservedAssignment +if globals().get("__spec__") is not None: + __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable +# Remove other six meta path importers, since they cause problems. This can +# happen if six is removed from sys.modules and then reloaded. (Setuptools does +# this for some reason.) +if sys.meta_path: + for i, importer in enumerate(sys.meta_path): + # Here's some real nastiness: Another "instance" of the six module might + # be floating around. Therefore, we can't use isinstance() to check for + # the six meta path importer, since the other six instance will have + # inserted an importer with different class. + if (type(importer).__name__ == "_SixMetaPathImporter" and + importer.name == __name__): + del sys.meta_path[i] + break + del i, importer +# Finally, add the importer to the meta path import hook. +sys.meta_path.append(_importer) diff --git a/2023/shelves/shelf_Nexus_Animation.mel b/2023/shelves/shelf_Nexus_Animation.mel index c4b9d9f..08480b7 100644 --- a/2023/shelves/shelf_Nexus_Animation.mel +++ b/2023/shelves/shelf_Nexus_Animation.mel @@ -144,5 +144,40 @@ global proc shelf_Nexus_Animation () { -commandRepeatable 1 -flat 1 ; + shelfButton + -enableCommandRepeat 1 + -flexibleWidthType 3 + -flexibleWidthValue 32 + -enable 1 + -width 35 + -height 34 + -manage 1 + -visible 1 + -preventOverride 0 + -annotation "Studio Library - Animation library for Maya" + -enableBackground 0 + -backgroundColor 0 0 0 + -highlightColor 0.321569 0.521569 0.65098 + -align "center" + -label "StudioLib" + -labelOffset 0 + -rotation 0 + -flipX 0 + -flipY 0 + -useAlpha 1 + -font "plainLabelFont" + -imageOverlayLabel "StudioLib" + -overlayLabelColor 0.8 0.8 0.8 + -overlayLabelBackColor 0 0 0 0.5 + -image "studiolibrary.png" + -image1 "studiolibrary.png" + -style "iconOnly" + -marginWidth 0 + -marginHeight 1 + -command "import sys\nimport os\nstudiolibrary_path = r'h:\\Workspace\\Raw\\Tools\\Plugins\\Maya\\2023\\scripts\\animation_tools\\studiolibrary'\nif studiolibrary_path not in sys.path:\n sys.path.insert(0, studiolibrary_path)\nimport studiolibrary\nstudiolibrary.main()" + -sourceType "python" + -commandRepeatable 1 + -flat 1 + ; }

      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 AWB>pF literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-LightItalic.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-LightItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5ebe2a2994aa32ae9b00233f99e9192162babfd9 GIT binary patch literal 213024 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ℑBesQYhC>- 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Regular.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2e31d02424ed50b9e05c19b5d82500699a6edbb0 GIT binary patch literal 217276 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%0DHhV?N1s&&lC=`j?-^cJA^!2jed0`4 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 }c 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

      dg4umb* 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-SemiBold.ttf b/2023/scripts/animation_tools/studiolibrary/studiolibrary/resource/fonts/OpenSans-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..99db86aa0282e425450c86508d42da77a9f4102b GIT binary patch literal 221164 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